当前位置: 首页 > 知识库问答 >
问题:

如何在Pygame中拥有无限的FPS并仍然控制程序的FPS?

沈俊美
2023-03-14

我做了一些研究发现:在Pygame、Python3和这个:Pygame时钟中设置一个固定的FPS。在游戏主循环中,滴答()与帧率。这与我的要求相似。

所以clock.tick(FPS)限制了在该FPS下运行的程序。这样做的原因是,您可以控制程序的FPS,它使等待等时间更容易。

但是,我如何才能不受限制的FPS,并且仍然控制我的FPS等待之类的时间呢?根据我的理解,这是不可能的,因为时钟。勾选(FPS)FPS加上上限,而不将其加入意味着无限FPS,但您无法控制FPS

因此,控制你的FPS或者让你的程序尽可能快地运行,但不受控制,这似乎是一个天气问题。

最后,我所问的是四个问题;

  1. 限制您的FPS的利弊

共有1个答案

汪皓
2023-03-14

你必须根据帧速率计算每帧的移动。

pygame。时间时钟tick返回自上次调用以来的毫秒数。当您在应用程序循环中调用它时,这是自上一帧以来经过的毫秒数。当您在没有参数(framerate=0)的情况下调用它时,FPS是无限的。

定义播放器每秒移动的像素距离(move\u per\u second)。然后计算应用程序循环中每帧的距离:

move_per_second = 500 # 500 is just an example and means 500 pixels/second

run = True
clock = pygame.time.Clock()
while run:
    ms_frame = clock.tick() # get the milliseconds passed since the last frame
    
    move_per_frame = move_per_second * ms_frame / 1000  
    
    # [...]

然而,使用这种方法,您正在浪费CPU时间,并且不会看到明显的差异。缺点是,您没有恒定的帧速率,您必须根据最后一帧中经过的时间计算所有动画和移动。

 类似资料:
  • 我目前正在制作一个游戏,我想限制每秒的帧数,但我对此有问题。这是我正在做的: 我通过每个帧执行的这个方法获取deltaTime: DeltaTime是有我所期望的值(大约0.012......到0.016...) 然后,我使用deltaTime通过睡眠窗口函数来延迟帧,如下所示: MAXFPS等于60,我乘以1000将秒转换为毫秒。虽然一切似乎都是正确的,但我的帧速率仍然超过了60帧(我的帧频约为

  • 我在MacOS上,试图安装pygame,但一直收到“没有名为‘pygame’的模块”错误。 在终端中开始,使用 它报告了错误: 一些答案暗示pygame与我当前的python版本3.8不兼容。于是我安装了python3.7.7,成功安装了pygame。数字一(one) 使用运行测试 终端显示<code>OK</code>。2. 我尝试在 pycharm 中运行一个项目并在 IDLE 中,两者都给了

  • 问题内容: 现在看来似乎是事实上的动画方法。在大多数情况下,它对我来说效果很好,但是现在我正在尝试制作一些画布动画,我在想:是否有任何方法可以确保它以特定的fps运行?我了解到,rAF的目的是使动画始终保持平滑,并且可能冒使动画不稳定的风险,但是现在它似乎以任意大不相同的速度运行,我想知道是否有一种方法可以打击那不知何故。 我会用,但是我想要rAF提供的优化(特别是当标签页处于焦点时自动停止)。

  • 我目前正在使用PyGame(Python 3)制作一个游戏,我正在寻找一种使游戏以固定的FPS运行的方法。 游戏的大部分内容都位于一个巨大的while循环中,用户在其中输入,精灵被渲染,等等。我的目标是能够设置一个固定的FPS,使游戏在快速或慢速计算机上以相同的速度运行。 当然,我可以在pygame中使用时钟模块: 然后将其称为每个循环: 但这将使游戏限制在每秒30帧。因此,如果我将其设置为500

  • 我有以下映射: 和以下道: 当在控制器方法中返回此道的结果时,我看到无限递归json: [{"contentId": 1,"name":"DSC_0029. JPG","版主状态":"IN_PROGRESS","版主评论":""","内容":{"userContent":{"contentId": 1,"name":"DSC_0029. JPG","版主状态":"IN_PROGRESS","版主评

  • 我们的团队正在开始学习fp-ts,我们从一些基本的异步示例开始(大部分是从这里拉出来的)。按顺序运行一组任务很棒,看起来像问题是,在fp-ts中执行并行任务时限制并发的惯用方法是什么?例如,Promise.map(在蓝鸟中)允许您设置像这样的并发限制。 一种解决方案可能是将数组拆分为块,然后使用序列和平面图迭代这些块。然而,这意味着每个区块中的每个任务都必须完成,然后才能进入下一个区块-一个长时间