2013-01-17 73 views
0

最初的目標是在事件1上反向播放動畫,通常在事件2上播放動畫。所以就用這樣的代碼:吐溫悠悠是永久的

/* some imports */ 
public class Element extends MovieClip { 
     private var tween:Tween; 

     public function Element() { 
      tween = new Tween(this, "y", Regular.easeInOut, -this.height, 0, 0.7, true); 
      tween.stop(); 

      this.addEventListener(event1, reverse); 
      this.addEventListener(event2, normal); 
     } 

     private function reverse(e:Event1) { 
      tween.yoyo(); 
     } 

     public function normal(e:Event2) { 
      tween.stop(); 
      tween.rewind(); 
      tween.start(); 
     } 
} 

現在我測試: 1.事件1發生,動畫播放通常 2.事件2發生,動畫反向 3.事件1發生1播放,和動畫在反向播放

由於某種奇怪的原因,yoyo在某種程度上是永久性的。我知道一些解決方法,比如爲每個動畫創建新的Tween,檢查yoyo是否已被使用等。

這是預期的行爲嗎?在Adobe API中,我閱讀了有關開始和完成道具的內容,並且他們都有「當創建新的Tween實例或調用Tween.yoyo()方法時,將此屬性設置爲參數。」我有手動重置它們嗎?

不想要使用Tweenmax,tweenlite或任何外部庫。

回答

1

The manual說爲了讓您的補間再次正常運行,請撥打另一個yoyo()。不幸的是,補間本身並沒有提供任何暗示,如果它現在是yoyo'd,所以你需要跟蹤這一點。

private var tween:Tween; 
    private var tween_yoyo:Boolean; 
    private function reverse(e:Event1) { 
     if (!tween_yoyo) tween.yoyo(); 
     else { 
      tween.stop(); 
      tween.rewind(); 
      tween.start(); 
     } 
     tween_yoyo=true; 
    } 

    public function normal(e:Event2) { 
     if (tween_yoyo) tween.yoyo(); 
     else { 
      tween.stop(); 
      tween.rewind(); 
      tween.start(); 
     } 
     tween_yoyo=false; 
    }  
+0

我誤解了yoyo的機制(我只是認爲它會播放動畫,而不是翻轉)。感謝您的清除 – Misiur