Попытка понять концепции установки постоянной скорости в игровом цикле. Моя голова болит. Я прочитал страницу deWiTTERS, но я не вижу, почему/как... когда я ее получаю... она проскальзывает.
while(true)
{
player->update() ;
player->draw() ;
}
Это будет работать как можно быстрее в зависимости от того, насколько быстро процессор... Я получаю это.
Чтобы работать с одинаковой скоростью на всех компьютерах, логика - это то, чего я не получаю. Если я пытаюсь работать со скоростью 60 кадров в секунду, то это означает, что каждые 16 мс объекты перемещаются кадром, да? Я не понимаю, как update()
или draw()
могут быть слишком медленными.
deWiTTERS (я использовал 60):
const int FRAMES_PER_SECOND = 60;
const int SKIP_TICKS = 1000 / FRAMES_PER_SECOND;
DWORD next_game_tick = GetTickCount();
// GetTickCount() returns the current number of milliseconds
// that have elapsed since the system was started
int sleep_time = 0;
bool game_is_running = true;
while( game_is_running ) {
update_game();
display_game();
next_game_tick += SKIP_TICKS;
sleep_time = next_game_tick - GetTickCount();
if( sleep_time >= 0 ) {
Sleep( sleep_time );
}
else {
// Shit, we are running behind!
}
}
Я не понимаю, почему он получает текущее время до начала цикла. И когда он увеличивается на SKIP_TICKS
, я понимаю, что он увеличивается до следующего 16 мс интервала. Но я тоже не понимаю эту часть:
sleep_time = nextgametick - GetTickCount()
Что означает Sleep(sleep_time)
? Процессор покидает цикл и делает что-то еще? Как он достигает 60 кадров в секунду?