【问题标题】:pygame.event.get() not returning any events when inside a threadpygame.event.get() 在线程内不返回任何事件
【发布时间】:2019-11-05 02:47:26
【问题描述】:

所以我有这段代码来处理 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 不注册按键的次数(我假设这是由于主循环中的其他事情)。

提前致谢。

【问题讨论】:

    标签: python python-3.x pygame


    【解决方案1】:

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

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

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

    【讨论】:

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