actionscript 2.0 / 3.0是否具有等效的c#sleep()?
答案 0 :(得分: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建议的某种标志。它充其量是脆弱的。
也许对你的问题有一个更好的方法,但是你不清楚在你的问题中你想要完成什么。
答案 1 :(得分: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在睡眠期间仍然具有响应性。
答案 2 :(得分:1)
没有ActionScript / Flash Player没有与c#sleep功能相同的功能。一方面,Flash不使用多个线程。
您必须手动实施该功能。
您可以使用布尔标志,您的代码只有在为true时才会执行。然后使用Timer class作为延迟。