动作脚本睡眠功能

时间:2010-06-09 21:04:12

标签: actionscript-3 action

actionscript 2.0 / 3.0是否具有等效的c#sleep()?

3 个答案:

答案 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作为延迟。