Libgdx: getRawDeltaTime() sollte 0 zurückgeben, wenn setContinuousRendering() von false auf true geändert wurde

Erstellt am 28. Dez. 2013  ·  3Kommentare  ·  Quelle: libgdx/libgdx

In den meisten Backends gibt es keine Möglichkeit, detlaTime zurückzusetzen... Dies führte dazu, dass es nicht möglich war, von nicht kontinuierlichem Rendering auf kontinuierliches Rendering umzuschalten, wenn eine Animation benötigt wird (insbesondere beim Animieren von Menüs in Scene2d.ui). Wenn Sie beispielsweise eine Animation wie diese einstellen:

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);
    }
});

Wenn die Schaltfläche im nicht kontinuierlichen Rendering gedrückt wird, wird das Erscheinungsbild aktualisiert, aber wenn das up-Ereignis 1 Sekunde nach dem down-Ereignis zum Click-Ereignis führt, ist getDeltaTime() größer als die Animationsdauer... also wird das kontinuierliche Rendering auf true gesetzt hat keine Auswirkung und die Animation wird sofort beendet.

Ich möchte eine Möglichkeit haben, die deltaTime beim Wechsel zum kontinuierlichen Rendering auf Null zu setzen, damit der erste _new_ Frame mit dem ersten Frame der Animation übereinstimmt (und nicht mit dem letzten):

  • mit der setContinousRendering() Methode jedes Backends
  • mit einem neuen setDeltaTime() und setRawDeltaTime()

Ich mache es mit Introspektion, was nicht wirklich gut ist, aber ich spare viel Akkulaufzeit und behalte die Animationen.

Was denken Sie ?

Hilfreichster Kommentar

Sie könnten (und sollten) die Deltazeit auf einen maximalen Wert begrenzen.

Sehen Sie, wie es gemacht wird in https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ActionTest.java

Alle 3 Kommentare

Sie könnten (und sollten) die Deltazeit auf einen maximalen Wert begrenzen.

Sehen Sie, wie es gemacht wird in https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ActionTest.java

Das ist ein guter Workaround!

Versuche dies
maxtime=0.2f
Delta = Delta > maxZeit ? maxZeit: Delta ;
überspringt bei max. 5 Bildern, wenn Sie 30 fps erhalten (niedrigste zulässige für eine reibungslose Bewegung)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen