Universal Tween Engine只有能夠計算任何東西的要求是您創建的Tweens
和Timelines
定期更新(在每個幀上)。
在大多數情況下,您應該使用TweenManager
來處理所有補間的更新過程。因此,您需要做的就是在每個框架上調用管理器的.update()
方法。對於安卓遊戲來說,這很容易實現,因爲每款遊戲都有一個「遊戲循環」,一個無限循環,在每一幀中重新計算和重繪世界。因此,你所需要做的就是在這個循環中插入經理更新呼叫,並且聲音。但是,純粹的Android UI應用程序不會公開它們的循環,所以你不能只在任何地方插入你的更新調用。
然而,你應該做的是創建一個單獨的線程,並在其內部有一個無限循環,並將其中的manager.update()方法。
private final TweenManager tweenManager = new TweenManager();
除了作爲一個布爾停止動畫中的onPause()你ativity的方法:
應該沒有微風:)
首先,你需要的地方創建一個經理工作
private boolean isAnimationRunning = true;
然後,你需要創建線程(在活動構造爲例):
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()
中,所以更新將在主UI UI線程中完成,因此您不會遇到任何同步問題。
我從來沒有嘗試引擎與遊戲以外的任何東西,但這種解決方案應該沒有任何問題的工作。
感謝AurélienRibon爲您提供的寶貴意見,我會嘗試一下。我可以使用此轉換位圖圖像並在此線程中調用Tween.to()嗎? –
使用這個,你可以對任何東西(位圖圖像或其他)應用補間,只要你爲每個你想要動畫的類註冊一個TweenAccessor即可。然後,您可以從UI線程(主android線程)調用Tween.to()。 –