我想让一个 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/