2011-10-03 51 views
1

我在Flash項目中有一個場景,我希望幀的順序在運行時被隨機化。我希望每一幀都只顯示一次。我希望每個演講的持續時間不變。什麼是最簡單的方法來隨機化AS3中的幀的順序而不重複?

我一直在玩弄一對夫婦的大衛·斯蒂勒的建議:

他們是有點過時(Void而不是voidthis._totalframes - 1而不是MovieClip.totalFrames),但主要聽起來很合理。

儘管如此,該方法似乎並不理想。大衛的例子對少量幀序列非常有效。但我有大約100個單獨的框架。

這樣做的最好方法是什麼?

我的心願:

  1. 無需標記每個幀單獨
  2. 理想的情況下,沒有必要重複每幀
  3. 易上的代碼來改變每個幀presention的持續時間

我並不是Flash的經驗,所以我要求一些顯然不可能的事情,但我很想看到關於如何繼續進行的建議。

回答

1

沒有太多的想法放進去,我會做這樣的事情:

(未測試)

//On frame 1 on a clear layer present on all frames. First frame should probably be empty 

var frames:Array = []; 
for(var i:Number = 1; i<this.totalFrames, i++) { 
    frames.push(i+1); 
} 
this.addEventListener(Event.ENTER_FRAME, frameFunc); 
function frameFunc(e:Event) { 
    var frameNum:Number = Math.floor(Math.random()*frames.length); 
    var frame:Number = frames[frameNum]; 
    frames[frameNum] = frames.pop(); //You could also use splice. 
    gotoAndStop(frame); 
} 

stop(); 
+0

這看起來相當好(不是在莫用閃光燈PC)。只要看看它,我可以看到一個遺漏:是否有一種普遍受到尊重的方法來管理每幀曝光的持續時間? –

+0

我想你可以讓事件監聽器變成一個計時器。您還需要檢查幀陣列是否爲空的時候:) –

+0

也許我誤解了這個問題,但很有可能這個解決方案會在以隨機順序顯示每一幀之前多次顯示一幀。 –

相關問題