2012-02-02 71 views
0
var LevelCode:Array = [10,20,30,40,50,60,70,80,...,990,1000]; 
var Piece0:Timer = new Timer(50, LevelCode[0]); 
var Piece1:Timer = new Timer(50, LevelCode[1]); 
... 
var Piece98:Timer = new Timer(50, LevelCode[98]); 
var Piece99:Timer = new Timer(50, LevelCode[99]); 

我想同時啓動Piece0定時器,Piece1定時器等。 我試過Piece0+Piece1.start();,但沒有奏效。在AS3中同時啓動多個定時器

你們能幫我嗎?

回答

3

運行

Piece0.start(); 
Piece1.start(); 

會引導他們足夠近的時間是他們可以解決閾值之下一樣,所以他們將有效地同時進行。啓動計時器不是一個資源密集型的過程。

+0

我想在一行中做,因爲會有100件 – werter318 2012-02-02 19:59:31

+0

在這種情況下,我推薦定時器和map(數組)。 – blahdiblah 2012-02-02 20:01:37

+0

我不認爲有可能在「確切」的同時開始全部100個。就像@blahdiblah所說的,啓動一個計時器並不是一個資源密集型的過程,所以如果你連續啓動一些計時器,它們都應該在相同的毫秒內啓動。但是如果你想開始其中的100個,你將無法同時啓動它們。你可以把它們放到一個數組中,並通過它們循環來使代碼更緊湊,但這就是它。 – lordofthefobs 2012-02-02 20:03:38

5

也許你不需要很多定時器,因爲你使用的是相同的50毫秒定時器。 爲什麼你不使用一個定時器並處理addEventListener指定的函數?

var myTimer:Timer = new Timer(50); 
myTimer.addEventListener(TimerEvent.TIMER, timerElapsed); 
myTimer.start(); 

function timerElapsed(event:TimerEvent):void 
{ 
    //handle your levels here 
} 
+0

它們並不完全相同,因爲它們重複了不同的次數,但這看起來似乎是一種更好的同步策略。 – blahdiblah 2012-02-02 20:10:58

+0

你可以做到這一點,以同步所有的計時器,並使用currentCount做不同的事情。但請記住timerElapsed()的執行時間不是50毫秒的一部分。意思是,如果timerElapsed()需要5毫秒運行,那麼每個定時器觸發之間的時間間隔爲55毫秒。不知道這對你是否重要,但它可能會產生很大的差異,取決於你想在事件中做什麼聽衆 – lordofthefobs 2012-02-02 20:58:22

+0

在我看來,這似乎是一個更好的解決方案,有一堆定時器。也許羣組計時器的週期是彼此的倍數/因數,並且有少數(〜10個)計時器作爲折衷? – 2012-02-02 20:59:44

0

你不能依賴像這樣同時觸發定時器。
這是一個非常糟糕的實現,你需要考慮重新設計。
ActionScript不是線程化的,因此是異步的。
因此,沒有兩個計時器事件會同時觸發。
它將永遠是一個接一個。
您應該遵循vulkanino所提出的建議,並將所有內容合併爲一個電話。
加上有超過100個計時器事件是很多的頭,你可以肯定所有100個計時器事件將在50毫秒內處理你讓他們運行?
如果不是,您會冒一些「重疊問題」,這些問題都取決於您在回調函數中執行的代碼。