Libgdx: getRawDeltaTime() doit retourner 0 lorsque setContinuousRendering() est passé de false à true

Créé le 28 déc. 2013  ·  3Commentaires  ·  Source: libgdx/libgdx

Dans la plupart des backends, il n'y a aucun moyen de réinitialiser detlaTime... Cela conduit à l'impossibilité de passer du rendu non continu au rendu continu lorsqu'une animation est nécessaire (spécialement lors de l'animation de menus dans scene2d.ui). Par exemple, lors de la définition d'une animation comme celle-ci :

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

Lorsque le bouton est enfoncé dans un rendu non continu, l'apparence est mise à jour mais si l'événement up conduit à l'événement click 1 seconde après l'événement down, le getDeltaTime() est plus grand que la durée de l'animation... donc définir le rendu continu sur true n'a aucun effet et l'animation s'est terminée immédiatement.

J'aimerais avoir un moyen de définir le deltaTime à zéro lors du passage au rendu continu afin que la première _nouvelle_ image corresponde à la première image de l'animation (et non à la dernière):

  • avec la méthode setContinousRendering() de chaque backend
  • avec un nouveau setDeltaTime() et setRawDeltaTime()

Je le fais avec introspection ce qui n'est pas vraiment un bon moyen mais m'économise beaucoup d'autonomie et garde les animations.

Qu'est-ce que tu penses ?

Commentaire le plus utile

Vous pouvez (et devriez) limiter le temps delta à une valeur maximale.

Voir comment cela se fait dans https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ActionTest.java

Tous les 3 commentaires

Vous pouvez (et devriez) limiter le temps delta à une valeur maximale.

Voir comment cela se fait dans https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ActionTest.java

C'est une bonne solution de contournement !

Essaye ça
temps max=0.2f
delta = delta > maxTime ? maxTime : delta ;
saute au maximum 5 images si vous obtenez 30 images par seconde (le plus bas autorisé pour un mouvement fluide)

Cette page vous a été utile?
0 / 5 - 0 notes