gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:01:38 32 4
gpt4 key购买 nike

这让我发疯,无论如何,通常的故事,试图保证我非常简单的游戏在运行它的任何 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com