【问题标题】:pygame - constant frame ratepygame - 恒定帧速率
【发布时间】:2021-05-17 18:06:55
【问题描述】:

我想在我的 Pygame 游戏中实现尽可能恒定的帧速率。

这个答案 (Setting a fixed FPS in Pygame, Python 3) 解释了如何给出流畅且与帧速率无关的结果,但这与恒定帧速率不同。

我的期望是(对于 30 FPS 目标):

  • 如果处理时间少于 1/30 秒,则休眠一段剩余时间以避免使用所有 CPU 资源。
  • 如果更多,请不要睡觉。

一种解决方案(但似乎不是最优的,不知道为什么):

... setup pygame...
clock = pygame.time.Clock()

# Main loop
while True:
    ...do some processing...
    ...possibly not same computation time every frame...
    dt = clock.tick(0)
    if dt < 1/FPS:
        clock.tick(1/ (1/FPS - dt))

在@Rabbid76 的回答后编辑clock.tick

【问题讨论】:

  • 为什么您觉得您的解决方案不是最优的?你在寻找什么样的改进?如果你有什么工作,我觉得它很好。
  • 嗯,我不太确定 pygame.Clock 的内部是如何工作的,但我认为两次调用 clock.tick 并不是最佳选择,并且想知道是否有任何内置方法可以实现这一点(因为这似乎是一个常见的要求)。
  • 很抱歉删除了我之前的评论。 clock.tick() 背后的想法不是你可以用你想要的帧速率调用它,它会做正确的事情吗?也就是说,你不能只用clock.tick(FPS) 替换代码的最后三行吗? - (我只是在阅读了下面给出的答案中对这个调用的描述后才考虑到这一点。)
  • 你说得对,我完全误解了tick 的作用(我以为它只睡了 1/FPS 秒)。刚刚测试过,无论之前的计算如何,帧率确实保持不变。谢谢!您要回答以便我接受吗?
  • 当然!我就是这么做的。

标签: python pygame pygame-clock pygame-tick


【解决方案1】:

我相信你可以用你想要的帧率调用clock.tick(),它会做正确的事情。也就是说,您可以将代码的最后三行替换为 clock.tick(FPS)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2017-09-30
    相关资源
    最近更新 更多