#python #pygame #multiprocessing
#python #python-3.x #pygame
Вопрос:
Итак, у меня есть этот код, который следит за пользовательскими вводами для игры в стиле pac-man.
def receiving_inputs(self):
while True:
events = pg.event.get()
for event in events:
if event.type == pg.KEYDOWN:
if event.key == pg.K_UP:
self.move = 'n'
elif event.key == pg.K_RIGHT:
self.move = 'e'
elif event.key == pg.K_DOWN:
self.move = 's'
elif event.key == pg.K_LEFT:
self.move = 'w'
time.sleep(1/60)
threading.Thread(target=self.receiving_inputs).start()
Когда я нажимаю любые клавиши на клавиатуре, я не получаю никаких событий, однако перемещение мыши вернет событие с использованием этого кода.
Раздражает то, что этот точный код отлично работает, когда он не в потоке. т.е. Когда в основном цикле программы.
К вашему сведению, я хочу использовать здесь поток, чтобы свести к минимуму количество раз, когда pygame не регистрирует нажатие клавиши (что, я предполагаю, связано с другими вещами в mainloop).
Заранее спасибо.
Ответ №1:
Вы вообще не получаете никаких событий, потому что вам нужно получать события в основном потоке.
Смотрите Документацию pygame.event
:
[…] Подсистема событий должна вызываться из основного потока.
Возможна только публикация событий из другого потока, но очередь событий должна обрабатываться в основном потоке.
Комментарии:
1. Это имеет большой смысл, но почему я все еще получаю события мыши?
2. Я понятия не имею, что вызывает такое поведение. В документации просто говорится: «Подсистема событий должна вызываться из основного потока». — так что, если вы выполняете обработку событий в потоке, тогда поведение не определено и, вероятно, зависит от системы.