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 中查看它是如何完成的

这是一个很好的解决方法!

尝试这个
最大时间=0.2f
delta = delta > maxTime ? 最大时间:增量;
如果达到 30fps,则最多跳过 5 帧(平滑移动的最低允许)

此页面是否有帮助?
0 / 5 - 0 等级