Я пытаюсь создать двупиксельную систему освещения, но я продолжаю получать странную ошибку. Вот мой код с пояснениями по пути:Невозможно использовать pygame.PixelArray правильно
import pygame, sys, math
white = (255, 255, 255)
black = (0, 0, 0)
screen_width = 640
screen_height = 480
pygame.init()
pygame.display.set_caption("Light sources")
screen = pygame.display.set_mode([screen_width, screen_height])
clock = pygame.time.Clock()
Эти регулярные линии настройки для любой Pygame игры
darkness = pygame.image.load("grafiikka/pimeys.png")
darkness.set_alpha(254)
lights_list = [] ### For controlling all light sources at a time
Загрузка в один цвета темноты изображения. Это будет блистать поверх всего остального, чтобы сделать его темным. Затем я смоделировал свет, изменив альфа-значение темноты в области света.
class lightsource: ### The parameters for a light
def ___init___(self, loc, ang, direction, radius):
self.loc = loc
self.ang = ang
self.dir = direction
self.radius = radius
я сделать класс LightSource
def LightDraw(): ### Drawing the lights, pixel per pixel
for v in lights_list:
for i in range (int((v.dir - v.ang/2)), int((v.dir + v.ang/2))):
for l in range (0, v.radius):
if int(i) < 90 and int(i) >= 0:
x = (v.loc[0]) + int(-l * math.cos(math.radians(i)))
y = (v.loc[1]) + int(-l * math.sin(math.radians(i)))
elif i < 180 and i >= 90:
x = (v.loc[0]) + int(l * math.cos(math.pi - math.radians(i)))
y = (v.loc[1]) + int(-l * math.sin(math.pi - math.radians(i)))
elif i < 270 and i >= 180:
x = (v.loc[0]) + int(l * math.sin(1.5 * math.pi - math.radians(i)))
y = (v.loc[1]) + int(l * math.cos(1.5 * math.pi - math.radians(i)))
elif i < 360 and i >= 270:
x = (v.loc[0]) + int(-l * math.cos(2 * math.pi - math.radians(i)))
y = (v.loc[1]) + int(l * math.sin(2 * math.pi - math.radians(i)))
alpha = int(254 * (l/v.radius))
print(int(254 * (l/v.radius)))
pygame.TempPimeys[x, y] = pygame.Color.a(alpha) ### THIS CAUSES ERROR
return TempPimeys.make_surface()
### Adding a test light source at (300, 200) on screen
testValo = lightsource()
testValo.___init___((300,200), 360, 90, 100)
lights_list.append(testValo)
Ошибка в функции, а именно в той строке, где я фактически изменяя значение альфа. Я не понимаю, что это за ошибка.
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
myOtherImage_rect.topleft = pygame.mouse.get_pos()
screen.fill(white)
TempPimeys = pygame.PixelArray(pimeys)
hämärä = LightDraw()
screen.unlock()
screen.blit(hämärä, (0, 0))
pygame.display.update()
И общий цикл.
Ошибки я получаю: Ошибка типа: «getset_descriptor» объект не вызываемая
Можете ли вы сказать мне номер строки ошибки дает и дать цельные код без перерывов? – PygameNerd