我收到一些意想不到的行爲,我不明白。我試圖按照http://gafferongames.com/game-physics/fix-your-timestep/和http://gameprogrammingpatterns.com/game-loop.html的描述實現一個固定的可變時間步長。當我在Visual Studio中運行程序時,我的inner while循環從未評估爲true;但是,當我取消註釋'this_thread :: sleep_for(1s)'時,while循環將在外循環執行10次左右後評估爲true。我希望在更快的機器上,這將是預期的結果。線程睡眠時只評估爲真
所以我的問題是,爲什麼會內環只有當「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);
}
謝謝你的幫助!
謝謝。我沒有意識到這一點。我將clock()切換到使用SDL函數SDL_GetTicks()並解決了問題。 有沒有一種C++標準的方法來獲得絕對時間?謝謝! – leaflet757
@ leaflet757:僅當您的編譯器足夠新時http://stackoverflow.com/a/26651148/560648 –