通用补间引擎能够计算任何内容的唯一要求是您创建的和Tweens
定期Timelines
更新(在每一帧上)。
在大多数情况下,您应该使用 aTweenManager
来处理所有补间的更新过程。因此,您需要做的就是.update()
在每一帧上调用管理器的方法。对于安卓游戏,这真的很容易做到,因为每个游戏都有一个“游戏循环”,一个无限循环,在每一帧上重新计算和重绘世界。因此,您需要做的就是在此循环中插入管理器更新调用,然后瞧。但是,纯 android UI 应用程序不会公开它们的循环,因此您不能在任何地方插入更新调用。
但是,您应该做的是创建一个内部带有无限循环的单独线程,并将 manager.update() 方法放入其中。它应该毫不费力地工作:)
首先,您需要在某处创建一个经理:
private final TweenManager tweenManager = new TweenManager();
以及用于停止 ativity 的 onPause() 方法中的动画的布尔值:
private boolean isAnimationRunning = true;
然后您需要创建线程(例如在 Activity 构造函数中):
new Thread(new Runnable() {
private long lastMillis = -1;
@Override
public void run() {
while (isAnimationRunning) {
if (lastMillis > 0) {
long currentMillis = System.currentTimeMillis();
final float delta = (currentMillis - lastMillis) / 1000f;
view.post(new Runnable() {) {
@Override public void run() {
tweenManager.update(delta);
}
};
lastMillis = currentMillis;
} else {
lastMillis = System.currentTimeMillis();
}
try {
Thread.sleep(1000/60);
} catch(InterruptedException ex) {
}
}
}
}).start();
然后你可以在你的 android UI 代码的任何地方创建补间。如您所见,更新调用被包围view.post()
,因此更新将在主 Android UI 线程中完成,因此您不会遇到任何同步问题。
除了游戏之外,我从未尝试过引擎,但这个解决方案应该可以正常工作。