这让我很生气,无论如何,通常的故事,试图通过运行它的任何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;
}
}
答案 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?