在 Pygame、Python 3 中设置固定的 FPS

Posted

技术标签:

【中文标题】在 Pygame、Python 3 中设置固定的 FPS【英文标题】:Setting a fixed FPS in Pygame, Python 3 【发布时间】:2016-06-07 15:12:42 【问题描述】:

我目前正在使用 PyGame (Python 3) 制作游戏,并且正在寻找一种使游戏以固定 FPS 运行的方法。

游戏的大部分内容都位于一个巨大的 while 循环中,在每个滴答声中都会接受用户输入、渲染精灵等等。我的目标是能够设置一个固定的 FPS,使游戏在快或慢的计算机上以相同的速度运行。

我当然可以使用 pygame 中的时钟模块:

clock = pygame.time.Clock()

然后在每个循环中调用它:

clock.tick(30)

但这将使游戏的上限保持在 30 FPS。因此,如果我将其设置为 500 FPS,它可能仍会像以前一样快速运行。我的目标是,如果我将其设置为 500 FPS,它将以与 500 FPS 相同的速度运行...

那么是否有可能让游戏以固定的 FPS 运行(或产生一种错觉),而不管计算机的速度如何 - 或者至少通过使用一些跳帧算法以相同的速度运行?

对不起,如果这个措辞相当混乱。

【问题讨论】:

【参考方案1】:

clock.tick 返回自上次调用clock.tick 以来的时间。移动时使用该值并将所有速度乘以它。 示例

dt = clock.tick(60)
player.position.x += player.xSpeed * dt
player.position.y += player.ySpeed * dt

这样,您的播放器将始终以相同的速度移动,而与您在 clock.tick() 函数中输入的内容无关。

重要的是每帧只调用一次clock.tick()

【讨论】:

这不是我想要的。无论计算机的速度如何,我都希望游戏以相同的速度运行,并且始终以我指定的 FPS 运行(或者至少给人一种错觉)。 这正是我的解决方案所做的。这就是所有游戏的做法。您使用增量时间并将其与您的所有速度相乘,这样您在游戏中的角色将始终以相同的速度移动,而不管您的计算机速度如何。 通过这个解决方案,您可以将任何您想要的 fps 放入 clock.tick() 游戏仍然会以正确的速度运行。 好的,谢谢,我会再试一次。我第一次得到了一些奇怪而令人难忘的结果,但这可能是我的错误。

以上是关于在 Pygame、Python 3 中设置固定的 FPS的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 4.3 中设置属性值不固定/viewDidLoad 被多次调用

如何在我的 pygame 项目的 Python 二进制文件中修复此编码错误?

SSL pinning - 在 AFSecurityPolicy 中设置固定公钥而不是固定证书

在 GridView 中设置固定行高

如何在 mongoengine/pymongo 中设置固定字段

在 Reactstrap 表中设置固定宽度