当前位置: 首页 > 面试题库 >

更快版本的“ pygame.event.get()”。为什么会错过事件,为什么会延迟事件?

阳宾实
2023-03-14
问题内容

我正在pygame中制作一个Asteroidz克隆,有两个for event in pygame.event.get()循环,一个用于检查退出请求,另外游戏应该已经通过按空格键开始,然后在游戏中进一步尝试限制玩家按住空格键并连续射击。下面是我的check_input函数的相关代码,每个循环运行一次。

def check_input(self):
    for event in pygame.event.get(): #NOT CHECKING THIS FAST ENOUGH, WHOLE PROCESS IS TOO SLOW
        if (event.type == pygame.KEYUP) and (event.key == pygame.K_SPACE):
            print ('boop')
            self.shootThrottle = 0

    if self.shootThrottle == 0:
        self.shootThrottle += 1
        bullets.add(Bullet(self.shape[0][0],self.shape[0][1], self.angle))

    key = pygame.key.get_pressed()

    if key[pygame.K_LEFT]:
        self.angle -= 7
        self.rotate(-7)
    elif key[pygame.K_RIGHT]:
        self.angle += 7
        self.rotate(7)

    if self.angle > 360:
        self.angle -= 360
    elif self.angle < 0:
        self.angle += 360

    if key[pygame.K_UP]:
        self.accelerate()
    elif key[pygame.K_DOWN]:
        self.decelerate()

我正在使用shootThrottle这种方法来尝试阻止子弹射击,直到释放空格键为止。该系统可以运行,但是由于for event in pygame.event.get()速度太慢,因此无法正常运行。

任何帮助深表感谢!


问题答案:

[…]并在循环中有 两个 for事件pygame.event.get()[..]“

这就是问题。pygame.event.get()获取所有消息并将其从队列中删除。如果pygame.event.get ()在多个事件循环中调用if ,则只有一个循环接收事件,但绝不会所有循环都接收所有事件。结果,似乎错过了一些事件。

获取一次事件,并在多个循环中使用它们,或将列表或事件传递给处理它们的函数和方法:

def handle_events(events):
    for event in events:
        # [...]

while run:

    event_list = pygame.event.get()

    # [...]

    # 1st event loop
    for event in event_list:
        # [...]

    # [...]

    # 2nd event loop
    for event in event_list:
        # [...]

    # [...]

    # function which handles events
    handle_events(event_list)


 类似资料:
  • 我已经阅读了Github Actions留档,无法弄清楚为什么当我发布新版本时,GitHub Action工作流会被几乎同时的和事件触发。换句话说,我的工作流yaml文件是这样开始的,指定它应该为推送和发布事件运行: 当我发布一个新版本(标签)时,我希望它执行一次。然而,我看到两个事件几乎同时触发(间隔约5-10秒): 现在,事件确实触发了我的存储库的,但唯一正在更新的文件是我的文件。事件的定义没

  • 问题内容: 以下示例在Node.js书中给出: 解释了while循环为何阻止执行时,作者说: 节点将永远不会执行超时回调,因为事件循环卡在了循环中,而循环在第7行开始了,因此永远不会给它处理超时事件的机会! 但是,作者没有解释为什么这是在事件循环的背景下发生的,还是在幕后真正发生了什么。 有人可以详细说明吗?为什么节点卡住?以及如何在保留控制结构的同时更改上述代码,以使事件循环不会被阻塞,并且代码

  • 我读了Patterson的以下声明 随着处理器进入更长的流水线并在每个时钟周期发出多条指令,分支延迟变得更长,单个延迟槽是不够的。 我可以理解为什么“每个时钟周期发出多条指令”会导致单个延迟槽不足,但我不知道为什么“更长的管道”会导致它。 另外,我不明白为什么更长的管道会导致分支延迟变得更长。即使管道更长(完成一条指令的步骤),也不能保证周期会增加,那么为什么分支延迟会增加呢?

  • 本文向大家介绍移动端点击事件为什么会有延迟?有哪些方法可以解决?相关面试题,主要包含被问及移动端点击事件为什么会有延迟?有哪些方法可以解决?时的应答技巧和注意事项,需要的朋友参考一下 视口延迟判断,300ms之内会不会有下一次点击操作,如果有就是放大缩小,没有就是点击事件 fastclick主要的原理就是,创建了一个div,并且执行了这个div的点击事件并且取消默认事件,再隐藏这个div

  • 我想知道>是否比>=更快?我试着对其进行基准测试,但要么需要0ms,要么需要永远。我知道差别会很小,但我必须在很多像素上操作。有人能告诉我什么更快吗?

  • 我读过几篇关于Flink的文章,在读Flink的博客时,我遇到了这样一句话:“最多延迟60秒(事件最多延迟1分钟)” 是否在Flink中定义乱序事件持续时间用于技术“水印”,如果不是,那么内部目的是什么?

  • 我非常肯定,在我的代码中,唯一可能抛出此错误的地方(基于端口号)是下面的代码。 我尝试删除语句,但没有改变结果。当该操作运行时,如果端口已经被进程绑定,我会得到以下错误,我希望捕获并报告该错误,而不会导致进程退出。