在大多数后端中,无法重置 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_ 帧匹配动画的第一帧(而不是最后一个):
我正在通过内省来做这件事,这并不是一个很好的方法,但可以为我节省很多电池寿命并保持动画效果。
你怎么认为 ?
您可以(并且应该)将增量时间限制为最大值。
这是一个很好的解决方法!
尝试这个
最大时间=0.2f
delta = delta > maxTime ? 最大时间:增量;
如果达到 30fps,则最多跳过 5 帧(平滑移动的最低允许)
最有用的评论
您可以(并且应该)将增量时间限制为最大值。
在https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ActionTest.java 中查看它是如何完成的