pygame.event.get () не возвращает никаких событий внутри потока

avatar
SirNibbleIII
22 июня 2019 в 16:26
221
1
2

Итак, у меня есть этот код, который отслеживает вводимые пользователем данные для игры в стиле 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 не регистрирует нажатие клавиши (что, как я предполагаю, связано с другими вещами в основном цикле).

Заранее спасибо.

Источник

Ответы (1)

avatar
Rabbid76
22 июня 2019 в 16:42
2

Вы вообще не получаете никаких событий, потому что вам нужно получать события в основном потоке.
См. Документацию для pygame.event:

[...] Подсистема событий должна вызываться из основного потока.

Публиковать события можно только из другого потока, но очередь событий должна обрабатываться в основном потоке.

SirNibbleIII
22 июня 2019 в 17:03
0

В этом есть большой смысл, но почему я все еще получаю события мыши?

Rabbid76
22 июня 2019 в 17:32
1

Понятия не имею, что вызывает такое поведение. В документации просто сказано: '«Подсистема событий должна вызываться из основного потока». - поэтому, если вы выполняете обработку событий в потоке, то поведение не определено и, вероятно, зависит от системы.

SirNibbleIII
23 июня 2019 в 20:49
0

Достаточно честно 😂😂