2013-03-07 133 views
0

我已經設置了6個動畫片段作爲array_0,另一組6個動畫片段作爲array_1。這就像兩個不同屏幕的選擇。這兩個數組都作爲all_array嵌套在另一個數組中。所有12個動畫片段在初始加載時定位到相同的x和y,並且在可見階段之外。我想使用兩個不同的全局變量進行索引。例如,cCat_Sel的取值範圍是0-5,另一個cScr_Sel取值範圍是0-1。 cCat_Sel將在舞臺上的六個按鈕單獨對象的點擊事件(每個類別的每個按鈕)上進行更改。移動補間動畫組使用as3動畫片段組

因此它會根據cScr_Sel的值顯示每個類別的內容。如果cScr_Sel爲0,那麼它將使用all_array [0] [cCat_Sel]來訪問當前目標,並且類似地爲1的值分別爲all_array [1] [cCat_Sel]

我已經完成了所有工作,包括所有補間動畫移動當前目標並使其可見。但補間不會將第二套mcs帶到可見區域。我有兩個函數用於移動,另一個用於通過使用mc.x屬性的補間動畫移出。每個相關的點擊事件;我必須移動當前mc並製作alpha 0,一旦完成,移入新的當前目標並製作alpha 1.

不知何故,我必須將這兩個補間結合在一個函數中。這是我卡住的部分。或者可能會將這些mcs放在兩個不同的陣列中,而不是正確的方法。我可以很容易地實現我想要在根的Enter Frame事件上檢查cCat_Sel和cScr_Sel變量,並且一個接一個地執行這兩個動畫,但它看起來像輸入幀使用了太多的cpu,並且使其變得更慢並且可能不是優選的。

願意嘗試任何人的建議或指導。提前致謝。 我沒有任何正式或非正式的編程教育,但我通過閱讀和嘗試了一些東西,因爲每stackoverflow問題和答案,有時谷歌工作。因爲我從堆棧溢出中找到的大部分答案。 更新:

 function fnSlideInOut(cMc:Object, pMc:Object){ 
     var HideX:Number =650; 
     var ShowX:Number = 0; 
     if(cMc != null){ 
      if(cMc.x != ShowX){ 
       //cMc.alpha = 1; 
       var SlideMcIn:Tween = new Tween(cMc, "x", Strong.easeOut, 650, ShowX, 0.5, true); 
       SlideMcIn.addEventListener(TweenEvent.MOTION_FINISH, fnSlideInFinish); 
       SlideMcIn.start(); 
      } 
     } 
     if(pMc != null){ 
      if(pMc.x != HideX){ 
       //pMc.alpha = 1; 
       var SlideMcOut:Tween = new Tween(pMc, "x", Strong.easeOut, 0, HideX, 0.5, true); 
       SlideMcOut.addEventListener(TweenEvent.MOTION_FINISH, fnSlideOutFinish); 
       SlideMcOut.start(); 
      } 
     } 

     function fnSlideOutFinish(e:TweenEvent){ 
      //SlideMcOut.obj.alpha = 0; 
      SlideMcOut.removeEventListener(TweenEvent.MOTION_FINISH, fnSlideOutFinish); 
      } 
     function fnSlideInFinish(e:TweenEvent){ 
      //SlideMcIn.obj.alpha = 1; 
      SlideMcIn.removeEventListener(TweenEvent.MOTION_FINISH, fnSlideInFinish); 
      } 
    }//End Function 
fnSlideInOut(cScr_Sel, pScr_Sel); 

我想專家希望你能在任何類型的錯誤,上面的代碼註釋。它工作99次,但是1次影片剪輯或者沒有到達目的地,或者當前和之前的兩個目標都顯示,而且這些目標也不在他們所設想的位置。這隻發生在快速連續發生按鈕點擊事件時。再次感謝

回答

0

一個選項可能是使用第三方庫,如TweenLite。然後,它會很容易讓你跑第二個動畫右一完成後:

private function startAnimation():void 
{ 
    var mcToHide:MovieClip = all_array[cScr_Sel][cCat_Sel]; 
    TweenLite.to(mcToHide, 1, {x: HIDDEN_X_POSITION, y:HIDDEN_Y_POSITION, alpha:0, onComplete:finishAnimation}); 
} 

private function finishAnimation():void 
{ 
    var mcToShow:MovieClip = all_array[(cScr_Sel + 1) % 2][cCat_Sel]; 
    TweenLite.to(mcToShow, 1, {x: VISIBLE_X_POSITION, y:VISIBLE_Y_POSITION, alpha:1}); 
} 

然後可以調用startAnimation()在相關鼠標點擊事件,將其具有cScr_SelcCat_Sel因此您的需求。

+0

我看着tweenLite鏈接,似乎我需要一些時間來進入它。但看起來很徹底。我相信這將長期幫助我。我一直在其他網站上看到Tweenlite。我看了一些可能性。它簡直太棒了,天空是極限。在Flash的Tween中建立的是如此原始,如此充滿垃圾。如果我可以使用內置的Tween類使其可行,我將上傳解決方案。非常感謝您提供快速回答並展示處理這種情況的正確方法。 – user2145746 2013-03-07 23:47:38

+0

那麼,根據我的經驗,你並不需要時間跳進TweenLite並開始使用它。除了向我的樣本中添加進口產品外,這也是您需要做的所有事情。無論如何,我很高興它可以幫助您 – duTr 2013-03-08 01:59:53

+0

再次感謝。我最終肯定會使用TweenLite。我也確信你的代碼會起作用。但這是我做出了一個快速解決方案。這不是很好,但它是我週一截止日期的臨時解決方案。 – user2145746 2013-03-08 02:10:28