c++ - 游戏循环帧率控制问题

标签 c++ frame-rate game-loop

这让我发疯,无论如何,通常的故事,试图保证我非常简单的游戏在运行它的任何 Windows 机器上具有相同的速度。我通过指定一个 1/60 的值来做到这一点,然后确保 fram 不能运行,直到该值自上次调用以来及时过去。由于某种原因,我遇到的问题是 1/60 等于 30hz,我必须将其设置为 1/120 才能获得 60hz。它也不会在 60hz 上爆炸,它会快一点。

如果我把它贴在这里,如果有人发现有什么不对,可以告诉我吗?或者更精确的方法?

float controlFrameRate = 1./60 ;

while (gameIsRunning)
{
    frameTime += (system->getElapsedTime()-lastTime);
    lastTime = system->getElapsedTime();

    if(frameTime > controlFrameRate)
    {
        gameIsRunning = system->update();
        
        //do stuff with the game

        frameTime = .0f;                   
    }
} 

最佳答案

不要调用 getElapsedTime 两次,两次调用之间可能会有细微差别。相反,存储它的值(value),然后重用它。此外,不是将 frameTime 设置为 0,而是从中减去 controlFrameRate,这样一来,如果一帧花费的时间稍长,下一帧将通过缩短一点来弥补。

while (gameIsRunning)
{
    float elapsedTime = system->getElapsedTime();

    frameTime += (elapsedTime-lastTime);
    lastTime = elapsedTime;

    if(frameTime > controlFrameRate)
    {
        gameIsRunning = system->update();

        //do stuff with the game

        frameTime -= controlFrameRate;
    }
}

我不确定您必须将速率设置为 1/120 的问题,您在这里使用的是什么计时 API?

关于c++ - 游戏循环帧率控制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10873740/

相关文章:

c++ - 如何在 Pocket PC 上显示/隐藏 SIP

c++ - MtGox API 和 websocketpp

c++ - 构造函数中的 weak_from_this()

c++ - 如何针对大量整数优化 C++/C 代码

.net - 在 WPF .Net 中测量 UI 性能的正确方法

android - Android 版 Firemonkey 中的游戏循环

c - 快板5游戏: game loop that runs at constant speed?

android - 为什么下面会拖Fragment Shader的性能(Open GL ES 2.0)

ffmpeg - 如何配置 AVStream 以使用 FFmpeg 写入 29.97FPS 文件

java - 如何在空游戏中计算 FPS?