python - 在 Pygame、Python 3 中设置固定 FPS

标签 python performance python-3.x pygame frame-rate

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

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

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

clock = pygame.time.Clock()

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

clock.tick(30)

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

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

抱歉,如果该措辞相当困惑。

最佳答案

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

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

这样你的玩家将始终以相同的速度移动,而不管你在 clock.tick() 函数中输入了什么。

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

关于python - 在 Pygame、Python 3 中设置固定 FPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35617246/

相关文章:

mysql - 使用多个 JOIN 查询 1k 条条目最多需要 10 秒

c++ - 创建字符串数组/vector 并找出其中所有字符串长度的有效方法

python - kmeans 簇数与 k 值不匹配

python - 带有字母的 ASCII 艺术

python - 通过 pyenv 安装的解释器不会添加到 $PATH

python - 在 Webelement 中通过 xpath 查找 Selenium

python - 为什么我不能使用 TensorFlow 一次性编码我的标签? (坏切片索引 None of type <type 'NoneType' >)

sql - 从 friend 那里获取帖子(您有权查看)

linux - 将 gstreamer 的输出重定向到 OpenCV

python - 根据每个列表的子集从列表列表中删除重复项