2012-05-22 38 views
2

我可以使用通用吐溫引擎進行android補間動畫嗎?適用於Android的通用吐溫引擎

Tween.to(getResources().getDrawable(R.drawable.ic_launcher), ParticleAccessor.POSITION_XY, 0.5f) 
    .target(0, 0) 
    .ease(Bounce.OUT) 
    .delay(1.0f) 
    .repeatYoyo(2, 0.5f) 
    .start(manager); 

我從wiki頁面複製了這段代碼,並將目標更改爲可繪製資源。我如何將這個drawable改爲Target Object?

回答

4

Universal Tween Engine只有能夠計算任何東西的要求是您創建的TweensTimelines定期更新(在每個幀上)。

在大多數情況下,您應該使用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線程中完成,因此您不會遇到任何同步問題。

我從來沒有嘗試引擎與遊戲以外的任何東西,但這種解決方案應該沒有任何問題的工作。

+0

感謝AurélienRibon爲您提供的寶貴意見,我會嘗試一下。我可以使用此轉換位圖圖像並在此線程中調用Tween.to()嗎? –

+0

使用這個,你可以對任何東西(位圖圖像​​或其他)應用補間,只要你爲每個你想要動畫的類註冊一個TweenAccessor即可。然後,您可以從UI線程(主android線程)調用Tween.to()。 –