2009-09-24 123 views
1

我使用AS2,但我也可以在AS3中執行此操作。Flash:將隨機影片剪輯加載到動畫中

我正在一個簡單的動畫與約10「硬幣」在屏幕上。我有一個影片剪輯,可以爲另一個影片剪輯提供動畫效果。我想將隨機影片剪輯從庫中拖入嵌套剪輯,以便在每次「翻轉」時出現隨機硬幣面。

我已經把所有的剪輯名稱到一個數組(COIN1,COIN2,coin3等)

我認爲這將被描述爲_root.coin_container.coin_animation.random_coin_here

會有主舞臺上有10個coin_container,嵌入了coin_animation。在動畫開始時,應該將數組中的隨機影片剪輯調用爲coin_animation,然後coin_animation將運行幾幀,重複調用另一個隨機影片剪輯並重復。

此外,如果我可以設置一個隨機時間讓動畫暫停,那麼10個動畫會隨機翻轉,這將會很好。

我希望這已經夠清楚了。 謝謝!

+0

那麼到目前爲止,您有什麼特別的東西? – JStriedl 2009-09-25 02:00:25

回答

0

這幾天我和AS3一起工作,這是我給出的解釋。

有很多方法可以解決這個問題。你可以使用Tweening引擎,比如Tweenlite,我的最愛之一,並使用它的onComplete參數,或者你可以創建一個函數來創建一個計時器並設置一個隨機等待的時間,然後等待完成後,動畫火災;一旦您的動畫觸發,它會發送一個事件,該事件正在您的每個硬幣動畫片段動畫中被偵聽。

mc1.addEventListener(Event.COMPLTE, _onComplete); 

private function _onComplete(e:Event):void 
{ 
    var target:MovieClip = e.target; 
    var timer:Timer = new Timer(Math.random() * 5 + 5, 1); //Returns a number between 5 and 10 
    timer.addEventListener(TimerEvent.TIMER, onTimer); 
    timer.start(); 
    function onTimer(e:TimerEvent):void 
    { 
     target.play(); 
    } 
} 

現在我們所要做的就是從所有硬幣動畫的最後一幀發送Event.COMPLETE。

至於你想如何開始你的隨機化。默認情況下,除非您添加了停止操作,否則它們都將自行開始播放,因此它們將首次同步,但會開始錯開。要隨機化開始,您必須在每個開始處放置停止動作,然後我會遍歷容器剪輯,告訴每個孩子在隨機數秒後開始播放,如上所述。

0

一個as2的例子。將其粘貼到空的Flash文件的第1幀中,創建一個名爲「coin」的動畫片段,並通過屬性將其鏈接標識符設置爲「coin」。您可以根據自己的需要進行調整。不需要幾幀...

var numCoins:Number = 10; 
var coins:Array = new Array(); 
var offset:Number = 500; 

//add coins to the stage 
addCoinsToStage(this); 

//shuffle the order 
fisherYatesShuffle(coins); 

//play them one by one with a random offset 
playMovies(coins, offset); 

function addCoinsToStage(obj:Object):Void{ 
    for(var i:Number = 0; i < numCoins; i++){ 
     obj.attachMovie("coin", "coin"+i, obj.getNextHighestDepth()); 
     coins.push(obj["coin"+i]); 
     //position on stage 
     coins[i]._x = Math.random() * Stage.width; 
     coins[i]._y = Math.random() * Stage.height; 
    } 
} 


function fisherYatesShuffle(arr:Array):Void{ 
    for(var i:Number = arr.length - 1; i > 1; i--){ 
     var j = Math.round(Math.random() * i); 
     var temp = arr[i]; 
     arr[i] = arr[j]; 
     arr[j] = temp; 
    } 
} 

function playMovies(arr:Array, delay:Number){ 
    for(var i:Number = 0; i < arr.length; i++){ 
     var d = i * delay; 
     trace(d); 
     setTimeout(playMovie, d, arr[i]); 
    } 
} 

function playMovie(movie:MovieClip){ 
    movie.play(); 
} 

您將需要正確創建硬幣movieclip。您應該在第1幀上有stop();,並且在最後一幀上有一個空白的空關鍵幀,它具有gotoAndPlay(2);