在 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 中设置固定公钥而不是固定证书