【问题标题】:pygame.event.get() not returning any events when inside a threadpygame.event.get() 在线程内时不返回任何事件
【发布时间】:2023-01-15 09:46:43
【问题描述】:

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

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 未注册按键的次数(我假设这是由于主循环中的其他原因)。

提前致谢。

【问题讨论】:

    标签: python python-3.x pygame


    【解决方案1】:

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

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

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

    【讨论】:

    • 这确实很有意义,但为什么我仍然会收到鼠标事件?
    • 我不知道是什么导致了这种行为。文档只是说'“事件子系统应该从主线程调用。”- 所以如果你在一个线程中进行事件处理,那么行为是未定义的并且可能取决于系统。
    猜你喜欢
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    相关资源
    最近更新 更多