pygame.event.get() 在线程内时不返回任何事件

Auc*_*tiA 5 python pygame python-3.x

所以我有这段代码来处理吃豆人风格游戏的用户输入。

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()
Run Code Online (Sandbox Code Playgroud)

当我按下键盘上的任何键时,我没有收到任何事件,但是,移动鼠标将使用此代码返回一个事件。

令人烦恼的是,这段代码在不在线程中时可以完美运行。即当处于程序的主循环中时。

仅供参考,我想在这里使用一个线程来最大程度地减少 pygame 未注册按键的次数(我假设这是由于主循环中的其他原因造成的)。

提前致谢。

Rab*_*d76 5

你根本得不到任何事件,因为你必须在主线程中获取事件。
请参阅以下文档pygame.event

[...] 事件子系统应该从主线程调用。

只能从其他线程发布事件,但事件队列必须在主线程中处理。