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

时间:2019-06-22 16:26:12

标签: 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未注册按键的次数(我认为这是由于主循环中的其他原因所致)。

谢谢。

1 个答案:

答案 0 :(得分:1)

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

  

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

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