これが、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 );
}