Libgdx: getRawDeltaTime () deve retornar 0 quando setContinuousRendering () mudou de falso para verdadeiro

Criado em 28 dez. 2013  ·  3Comentários  ·  Fonte: libgdx/libgdx

Na maioria dos back-ends, não há como redefinir detlaTime ... Isso leva à impossibilidade de alternar de renderização não contínua para renderização contínua quando uma animação é necessária (especialmente ao animar menus em scene2d.ui). Por exemplo, ao definir uma animação 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);
    }
});

Quando o botão é pressionado em uma renderização não contínua, a aparência é atualizada, mas se o evento up levar ao evento click 1 segundo após o evento down, o getDeltaTime () é maior do que a duração da animação ... portanto, definindo a renderização contínua como true não tem efeito e a animação termina imediatamente.

Eu gostaria de ter uma maneira de definir o deltaTime para zero ao mudar para a renderização contínua, de modo que o primeiro _novo_ quadro corresponda ao primeiro quadro da animação (e não ao último):

  • com o método setContinousRendering () de cada back-end
  • com um novo setDeltaTime () e setRawDeltaTime ()

Estou fazendo isso com introspecção, o que não é muito bom, mas economiza bastante bateria e mantenho as animações.

O que você acha ?

Comentários muito úteis

Você pode (e deve) limitar o tempo delta a um valor máximo.

Veja como isso é feito em https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ActionTest.java

Todos 3 comentários

Você pode (e deve) limitar o tempo delta a um valor máximo.

Veja como isso é feito em https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ActionTest.java

Essa é uma boa solução alternativa!

Tente isto
maxtime = 0.2f
delta = delta> maxTime? maxTime: delta;
pula no máximo 5 quadros se você obtiver 30 fps (o menor permitido para movimento suave)

Esta página foi útil?
0 / 5 - 0 avaliações