Libgdx: setContinuousRendering()がfalseからtrueに変更された場合、getRawDeltaTime()は0を返す必要があります

作成日 2013年12月28日  ·  3コメント  ·  ソース: libgdx/libgdx

ほとんどのバックエンドでは、detlaTimeをリセットする方法はありません...これにより、アニメーションが必要な場合(特に、scene2d.uiのメニューをアニメーション化する場合)に、非連続レンダリングから連続レンダリングに切り替えることができなくなります。 たとえば、次のようなアニメーションを設定する場合:

final TextButton button = new TextButton("New Game", textButtonStyle);
button.addListener(new ClickListener() {
    public void clicked(InputEvent event, float x, float y) {
        Gdx.app.debug("TestApplication", "button clicked");
        MoveToAction outAction = Actions.action(MoveToAction.class);
        outAction.setPosition(0, 0);
        outAction.setDuration(.5f);
        outAction.setInterpolation(Interpolation.pow2Out);
        button.addAction(Actions.sequence(outAction, Actions.run(new Runnable() {
            <strong i="6">@Override</strong>
            public void run() {
                Gdx.graphics.setContinuousRendering(false);
                Gdx.graphics.requestRendering();
            }
        })));
        Gdx.graphics.setContinuousRendering(true);
    }
});

非連続レンダリングでボタンを押すと、外観は更新されますが、アップイベントがダウンイベントの1秒後にクリックイベントにつながる場合、getDeltaTime()はアニメーションの継続時間よりも長くなります...したがって、連続レンダリングをtrueに設定します効果はなく、アニメーションはすぐに終了します。

連続レンダリングに変更するときにdeltaTimeをゼロに設定して、最初の_new_フレームがアニメーションの最初のフレーム(最後のフレームではない)と一致するようにする方法が必要です。

  • 各バックエンドのsetContinousRendering()メソッドを使用する
  • 新しいsetDeltaTime()とsetRawDeltaTime()を使用

私は内省でそれをやっていますが、それは本当に良い方法ではありませんが、バッテリーの寿命を大幅に節約し、アニメーションを維持します。

どう思いますか ?

最も参考になるコメント

デルタ時間を最大値に制限することができます(そしてそうすべきです)。

https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ActionTest.javaでどのように行われるかを

全てのコメント3件

デルタ時間を最大値に制限することができます(そしてそうすべきです)。

https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ActionTest.javaでどのように行われるかを

これは良い回避策です!

これを試して
maxtime = 0.2f
デルタ=デルタ> maxTime? maxTime:デルタ;
uが30fpsを取得した場合、最大5フレームでスキップします(スムーズな移動のために許容される最低値)

このページは役に立ちましたか?
0 / 5 - 0 評価