java - LIBGDX Animate without enternig render()

标签 java android libgdx

我想让一个 Actor 在一个方法中从一个点移动到另一个点。

    int i=0;
    while(i<20){
        actor.get(nb).moveBy(rx, ry);
        //Wait
        long ti = System.nanoTime();
        while((System.nanoTime()-ti)<50000000){}
        i++;
    }

但是当它发生时,动画不会显示,直到 Actor 到达最后一点,因为它不会进入渲染方法,直到此方法完成。

有没有办法在不使用渲染方法的情况下使动画发生?

最佳答案

您应该阅读更多有关 libgdx 及其架构工作原理的信息。 The life cycle .

你在那里做的是主动等待,这是你应该永远做的事情。 render() 方法实际上得到一个 float 值,称为 deltaTime。这是渲染最后一帧所花费的时间。您可以使用此值根据耗时更新您的 Actor 位置。

actor.get(nb).moveBy(rx * deltaTime, ry * deltaTime);

这样你就可以在 1 秒内将你的 actor 移动 (rx, ry)。如果你想让它在 2 秒内发生,你应该降低速度。

actor.get(nb).moveBy(rx / 2 * deltaTime, ry / 2 * deltaTime);

这样你就不会完全阻塞你的程序,而是根据已经过去的时间移动 Actor 。然后它将被渲染,并在下一次调用 render(deltaTime) 时,libgdx 将在这之后立即执行,您将再次执行相同的操作,直到您到达目的地。这必须以不同的方式处理,否则你的 Actor 将永远不会停止移动。您可以使用一个简单的 if 语句来做到这一点,该语句将阻止 actor 从某个点开始移动。

if (actor.getPosition().x < 10, actor.getPosition().y < 15) {
     actor.get(nb).moveBy(rx / 2 * deltaTime, ry / 2 * deltaTime);
}

关于java - LIBGDX Animate without enternig render(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23354475/

相关文章:

java - 如何用不同的方法绘制 Sprite libgdx

java - 在java中解析html以提取信息

java - 无法从 TestNG Class ->java.lang.NullPointerException 调用两个单独类的属性

java - 在 snackbar 操作中,如何确保从数据库中永久删除软删除记录是安全的?

android - 为什么 TextView.setText() 会警告您不要连接字符串?

java - libGDX 可解锁管理和 gdx-pay\Native Android\IOS 支付

java - 除了 Javadoc 之外,JDK 类是否有任何进一步的规范?

android - 如何动态更改 ListView 项的 textColor?

android - 工具栏无法正常工作

java - 配合 libGDX 和 Jetbrains MPS