Faster version of 'pygame.event.get()'. Why are events being missed and why are the events delayed?
Более быстрая версия 'pygame.event.get ()'. Почему пропускаются события и почему они задерживаются?
Я создаю клон Asteroidz в pygame и у меня есть два for event in pygame.event.get() цикла, один для проверки запроса на выход и того, должна ли игра начинаться нажатием пробела, затем далее в игре, чтобы попытаться ограничить игрока от удерживания пробела нажатой и непрерывной стрельбы. Соответствующий код для моей check_input функции, которая запускается один раз в каждом цикле, приведен ниже;
defcheck_input(self): for event in pygame.event.get(): #NOT CHECKING THIS FAST ENOUGH, WHOLE PROCESS IS TOO SLOW if (event.type == pygame.KEYUP) and (event.key == pygame.K_SPACE): print ('boop') self.shootThrottle = 0
if self.shootThrottle == 0: self.shootThrottle += 1 bullets.add(Bullet(self.shape[0][0],self.shape[0][1], self.angle))
if key[pygame.K_UP]: self.accelerate() elif key[pygame.K_DOWN]: self.decelerate()
Я использую shootThrottle как средство, чтобы попытаться остановить выпуск пуль, пока не будет отпущен пробел. Эта система работает, но из-за того, что for event in pygame.event.get() слишком медленная, она не функционирует должным образом.
Мы очень ценим любую помощь!
Переведено автоматически
Ответ 1
[...] и есть два цикла for event в pygame.event.get() циклах [..] "
В этом проблема. pygame.event.get() получите все сообщения и удалите их из очереди. Смотрите документацию:
Это позволит получить все сообщения и удалить их из очереди. [...]
Если pygame.event.get() вызывается в нескольких циклах событий, события получает только один цикл, но никогда не все циклы получают все события. В результате некоторые события оказываются пропущенными.
Получайте события один раз за кадр и используйте их в нескольких циклах или передавайте список или события функциям и методам, где они обрабатываются:
defhandle_events(events): for event in events: # [...]
while run:
event_list = pygame.event.get()
# [...]
# 1st event loop for event in event_list: # [...]
# [...]
# 2nd event loop for event in event_list: # [...]
# [...]
# function which handles events handle_events(event_list)