1

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

1 に答える 1

0

フレームレートを制限する方法はいくつかありますが、必要なのは次の場合です。

具体的には、レンダリングは、冗長フレームをレンダリングするのではなく、ロジックが更新された場合(つまり、ロジックの更新が発生していない場合)にのみレンダリングする必要があります。

次に、単純なブールフラグを設定するだけです。でtrueに設定しupdate_game()、でチェックインしonDraw()ます。falseの場合は、画面を描画/クリアせずに戻るだけです。trueの場合、描画を行い、falseに設定します。

于 2013-02-23T22:12:18.957 に答える