Вот код игрового цикла, который я внедрил в свое приложение для Android.
Он отлично работает, но проблема, с которой я сталкиваюсь, заключается в том, что, хотя он ограничивает обновления логики на уровне 30, фактический рендеринг выполняется полностью, что, очевидно, не очень хорошо для времени автономной работы.
Я не могу решить, как также ограничить/ограничить рендеринг до фиксированного количества (скажем, 30 или около того FPS).
В частности, рендеринг должен выполняться только при обновлении логики, а не при рендеринге избыточных кадров (т. е. когда не произошло никакого обновления логики).
РЕДАКТИРОВАТЬ: я только что добавил часть кода интерполяции - может ли это быть причиной проблемы, когда я закрываю кадры, как рекомендовано @Geobits?
int TICKS_PER_SECOND = 30;
int SKIP_TICKS = 1000 / TICKS_PER_SECOND;
int MAX_FRAMESKIP = 10;
long next_game_tick = GetTickCount();
int loops;
bool game_is_running = true;
while( game_is_running ) {
loops = 0;
while( GetTickCount() > next_game_tick && loops < MAX_FRAMESKIP) {
update_game();
next_game_tick += SKIP_TICKS;
loops++;
}
interpolation = float( GetTickCount() + SKIP_TICKS - next_game_tick )
/ float( SKIP_TICKS );
display_game( interpolation );
}