【发布时间】:2016-05-14 11:16:56
【问题描述】:
我遇到了一些我不理解的意外行为。我正在尝试按照http://gafferongames.com/game-physics/fix-your-timestep/ 和http://gameprogrammingpatterns.com/game-loop.html 的描述实现一个固定的可变时间步长。当我在 Visual Studio 中运行程序时,我的内部 while 循环永远不会评估为真;但是,当我取消注释“this_thread::sleep_for(1s)”时,在外部循环执行 10 次左右后,while 循环将评估为真。我希望在更快的机器上,这将是预期的结果。
所以我的问题是,为什么内部循环只有在 'this_thread::sleep_for(1s)' 未注释时才评估为真?无论 sleep_for 如何,lagTime 都不应该大于 fixedDeltaTime 吗?数学是不是花太多时间在电脑上或其他什么东西上?
int updateCount = 0;
double CLOCKS_PER_MILLISECOND((double)CLOCKS_PER_SEC * 1000.0);
double previousTime = std::clock() / CLOCKS_PER_MILLISECOND;
double newTime = 0, deltaTime = 0, lagTime = 0;
double fixedDeltaTime = 1.0 / 60.0;
while (gameIsRunning)
{
newTime = std::clock() / CLOCKS_PER_MILLISECOND;
deltaTime = newTime - previousTime;
previousTime = newTime;
lagTime += deltaTime;
inputSystem.update();
sceneManager.update();
while(lagTime >= fixedDeltaTime) // never evalutes as true?
{
physicsSystem.update();
lagTime -= fixedDeltaTime;
updateCount++;
}
std::cerr << "-----" << updateCount << "-----" << std::endl;
physicsSystem.interpolate(lagTime / fixedDeltaTime);
renderSystem.update();
audioSystem.update();
updateCount = 0;
//std::this_thread::sleep_for(1s);
}
感谢您的帮助!
【问题讨论】:
标签: c++ while-loop boolean double game-loop