2010-06-09 144 views
11

actionscript 2.0/3.0有相當於c#sleep()嗎?動作腳本睡眠功能

+0

爲了什麼目的? – 2010-06-09 21:34:28

+3

誰將這個問題標記爲重複,因爲**真正的**和正確的答案只在這裏在這個線程在這裏?這是一個很好的問題和一個很好的答案(http://stackoverflow.com/a/3011589/1442225)。 – Bitterblue 2014-04-25 10:56:30

回答

19

不是。你可以阻止(幾乎所有)代碼執行類似於:

function sleep(ms:int):void { 
    var init:int = getTimer(); 
    while(true) { 
     if(getTimer() - init >= ms) { 
      break; 
     } 
    } 
} 

trace("hello"); 
trace(getTimer()); 
sleep(5000); 
trace("bye"); 
trace(getTimer()); 

但我不明白這怎麼可能在flash中有用。同時,與上述代碼類似的是一個非常糟糕的想法,因爲播放器會凍結並且無響應(如果超過超時限制(默認爲15),也可能會導致腳本超時)。

如果您只想延遲執行一段代碼,可以使用Timer對象或setTimeout函數。不過,這將是非阻塞的,因此您必須使用TandemAdam建議的某種標誌。它最好會變脆。

也許對於您的問題有更好的方法,但不清楚你在你的問題中想要完成什麼。

+0

謝謝,我可以使用這個..只是想延遲一段代碼的執行時間少於100ms。 – Kemrop 2010-06-10 17:51:00

+1

這是一個很好的測試代碼! +1 – Worker 2012-09-18 13:02:05

+0

這是一個完全不必要的CPU使用,幾乎肯定應該是downvoted。 – sleepycal 2014-05-11 16:06:46

1

沒有ActionScript/Flash Player沒有等效於c#sleep函數。有一件事,Flash不使用多個線程。

您將不得不手動實現該功能。

你可以使用一個布爾標誌,你的代碼只會在true時執行。然後使用Timer class作爲延遲。

3

您可以實現sleep功能是這樣的:

function sleep(counter: int, subsequentFunction: Function, args: Array): void 
{ 
    if (counter > 0) 
     callLater(sleep, [counter - 1, subsequentFunction, args]); 
    else 
     callLater(subsequentFunction, args); 
} 

與應暫停後要處理的函數調用它。

// call trace('Hello') after 100 cycles 
sleep(100, trace, ['Hello']); 
// call myFunction() after 50 cycles 
sleep(50, myFunction, []); 

這種方法的優點是,在睡眠期間UI仍然響應。

+0

你好! callLater函數將如何? – IneedHelp 2012-01-14 17:30:52

+0

@IneedHelp:查看我更新的答案 – splash 2012-01-18 12:35:49