Libgdx: getRawDeltaTime () debería devolver 0 cuando setContinuousRendering () cambia de falso a verdadero

Creado en 28 dic. 2013  ·  3Comentarios  ·  Fuente: libgdx/libgdx

En la mayoría de los backends no hay forma de restablecer detlaTime ... Esto conduce a la imposibilidad de cambiar de renderizado no continuo a renderizado continuo cuando se necesita una animación (especialmente cuando se animan menús en scene2d.ui). Por ejemplo, al configurar una animación como esta:

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

Cuando se presiona el botón en renderizado no continuo, la apariencia se actualiza, pero si el evento up conduce al evento click 1 segundo después del evento down, el getDeltaTime () es mayor que la duración de la animación ... por lo que establecer el renderizado continuo en verdadero no tiene ningún efecto y la animación terminó de inmediato.

Me gustaría tener una forma de establecer el deltaTime en cero al cambiar a renderizado continuo para que el primer _new_ frame coincida con el primer fotograma de la animación (y no el último):

  • dentro del método setContinousRendering () de cada backend
  • con un nuevo setDeltaTime () y setRawDeltaTime ()

Lo estoy haciendo con introspección, que no es realmente una buena manera, pero me ahorra mucha batería y me quedo con las animaciones.

Qué piensas ?

Comentario más útil

Podría (y debería) limitar el tiempo delta a un valor máximo.

Vea cómo se hace en https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ActionTest.java

Todos 3 comentarios

Podría (y debería) limitar el tiempo delta a un valor máximo.

Vea cómo se hace en https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ActionTest.java

¡Esa es una buena solución!

Prueba esto
maxtime = 0.2f
delta = delta> maxTime? maxTime: delta;
salta a un máximo de 5 fotogramas si obtiene 30 fps (el mínimo permitido para un movimiento suave)

¿Fue útil esta página
0 / 5 - 0 calificaciones