gameloop帧率控制问题

时间:2012-06-03 20:33:01

标签: 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;                   
    }
} 

1 个答案:

答案 0 :(得分:3)

请勿拨打getElapsedTime两次,两次通话之间可能会略有不同。相反,存储其值,然后重用它。此外,不是将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?