В настоящее время я пытаюсь создать анимацию молнии, используя pygame. Я планировал запуск анимации молнии каждые 3 секунды с помощью модуля pygame.timer.set_timer (), поскольку у меня будут происходить другие анимации, независимые от анимации молнии.
Для простоты я символизировал молнию желтым треугольником, который удлиняется. Как только он достигнет определенной точки, я планировал, чтобы желтый треугольник остановился, исчез на 3 секунды, прежде чем снова повториться.
Однако lightning_event, похоже, не запускается каждый раз внутри цикла while, и задержка не происходит.
Я посмотрел на пример invaders с использованием pygame.timer.set_timer (), хотя он не использует координаты xy. Я попытался настроить код invaders так, чтобы он использовал координаты xy, но он тоже не работал.
Другой вопрос, который у меня возникает, заключается в том, что если одновременно происходит много событий, лучше ли использовать многопоточность или многопроцессорность, чем использование pygame.timer.set_timer ()? Если да, то как можно использовать многопоточность или многопроцессорность с модулем pygame? Особенно из-за GIL питона?
Вот мой код для анимации освещения:
import pygame
pygame.init()
BLACK = (0,0,0)
WHITE = (255,255,255)
GREEN = (0,255,0)
RED = (255,0,0)
BLUE = (0,0,255)
YELLOW = (200,240,70)
size = (700,500)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Multithreading Project")
done = False
delay1 = 3000
clock = pygame.time.Clock()
def lightning(y_coord,y_coord_incr):
pygame.draw.polygon(screen,YELLOW,[[200,200],[100,y_coord],[300,y_coord]])
lightning_event = pygame.USEREVENT + 1
pygame.time.set_timer(lightning_event, delay1)
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == lightning_event:
if y_coord > 500:
y_coord = 200
screen.fill(WHITE)
lightning(y_coord,y_coord_incr)
y_coord = y_coord + y_coord_incr
pygame.display.flip()
clock.tick(60)
pygame.quit()
Спасибо!