2011-05-13 48 views
0

我會如何使用計時器一次啓動多個影片剪輯,然後循環它們(如果它們的長度都不相同),以便它們再次同步重啓?如何使用AS3定時器執行和循環不同長度的影片剪輯?

例如,假設在t = 0時,3個影片剪輯開始。短片1的長度爲3秒。影片剪輯2是6秒長。短片3的長度爲10秒。影片剪輯1會在影片剪輯2和3之前結束,但我不希望它重新啓動,直到其他人都完成。

此外,是否可以設置倒計時,以便短片不是在持續時間後,而是在特定時間之後發起的?例如,不是從10秒開始計時器倒計時,然後播放,而是倒數到下午12:00,然後播放影片剪輯。如果這是可能的,任何人都可以告訴我如何?

在此先感謝。

回答

0

下面是我如何解決第一個問題 - 只需將所有動畫影片剪輯添加到mcs陣列。

var mcs:Array = [mc1,mc2,mc3]; 

// work out the longest running MovieClip 
var longest:MovieClip = mcs[0]; 

var i:MovieClip; 
for each(i in mcs) 
{ 
    if(i.totalFrames > longest.totalFrames) longest = i; 

    i.addEventListener(Event.ENTER_FRAME, animation); 
} 

/** 
* Check animation progress on each MovieClip 
*/ 
function animation(e:Event):void 
{ 
    var m:MovieClip = MovieClip(e.target); 

    if(m.currentFrame == m.totalFrames) 
    { 
     m.stop(); 

     if(m == longest) 
     { 
      var i:MovieClip; 
      for each(i in mcs) 
      { 
       i.gotoAndPlay(1); 

       // your own actions here 
       // for when all animation completes 
      } 
     } 
    } 
} 

至於後一個問題,我不知道你爲什麼會想這樣做,但這裏有一個很簡單的辦法:

var d:Date = new Date(); 
var time:String = d.getHours() + ":" + d.getMinutes(); 

var ran:Boolean = false; 
if(time == "12:00" && !ran) 
{ 
    ran = true; 
    // being your animations etc 
} 
0

使用此代碼爲最長片段:

longestClip.addFrameScript(longestClip.totalFrames, restartAllMyClips); 

restartAllMyClips是一個將重新啓動它們的函數。

有意義嗎?

對於時間問題 - 你可以有以上調用一個名爲waitAndPlay(時間)

基本功能,在功能,你可以計算出的時刻,到時候你作爲一個參數傳遞之間的時間量的代碼。

然後,您只需設置一個計時器的持續時間。在該定時器上設置一個偵聽器來執行restartAllMyClips。

所以是這樣的:

var waitTimer:Timer = new Timer(duration, 1); 
waitTimer.addEventListener(TimerEvent.TIMER_COMPLETE, restartAllMyClips); 
waitTimer.start(); 

這裏有addFrameScript()一些信息 - ()http://blog.rackdoll.nl/?p=118

+0

什麼是** ** addFrameScript? – Marty 2011-05-13 02:50:59

+0

它是巫術:)沒有記錄的功能,你沒有看到太多。但它適用於這樣的情況! – prototypical 2011-05-13 02:59:34

+0

啊,非常酷。看起來比我的答案更容易哈哈。 – Marty 2011-05-13 03:02:59