如何在ActionScript中暂停执行

时间:2009-10-01 22:32:38

标签: flex actionscript-3 actionscript flex3

有没有办法停止ActionScript中的执行,比如sleep()方法?

我知道有一个setTimeout()方法,但是setTimeout()只是为延迟执行设置一个事件。

4 个答案:

答案 0 :(得分:3)

没有。没有睡觉。抱歉。

请在此处查看我的答案:ActionScript: pushing a closure onto the event stack?。它没有谈论睡眠,但我试图提供延迟函数调用的概述。

答案 1 :(得分:1)

你需要考虑不睡觉。 Actionscript不是那种语言。因为flash播放器在帧渲染和代码执行之间交替,所以在代码中睡觉总是一个坏主意,这就是为什么没有方法可以做到这一点。

话虽如此,你可以通过使用阻塞方法ExternalInterface.call来实现这一点,并在Javascript中执行阻塞方法(如XHR请求)。

虽然绝对是愚蠢的,所以不要这样做。

也许您需要的是Timer

答案 2 :(得分:0)

没有办法在PHP中暂停所有应用程序的执行,但有一些解决方法(除非您设置断点或故意创建运行时错误,不要认为这就是您的意思)。可能这是因为通常flash应用程序意味着在不到一个“帧”中执行所有脚本。

当用户没有聚焦时,能够“暂停”网站的动画是很常见的。这可以通过监听Event.DEACTIVATE然后删除ENTER_FRAME监听器并终止所有正在进行的进程来完成。

您还可以创建一个中央EventDispatcher来替换内部的ENTER_FRAME,这样您就可以无缝地控制执行速度以及暂停/恢复(不会停止执行脚本,也不会停止异步处理程序,例如加载程序等)。

答案 3 :(得分:-4)

是的,虽然知道15秒的脚本超时。 (您可以在发布设置中更改该15秒脚本超时...)

我在过去发现,如果你正在寻找这个功能,你做错了什么:)

无论你想要完成什么,都可能需要一个事件监听器。

//adding this ENTER_FRAME event listener just to show that the script pauses for one
// second before the first frame executes
addEventListener( Event.ENTER_FRAME, onFrame );

function onFrame( event:Event ):void {

    trace( "first frame occurs after pause of", getTimer() + " ms" );
    removeEventListener( Event.ENTER_FRAME, onFrame );

};

var startTime:int = getTimer();
var pauseTime:int = 1000;

while( ( getTimer() - startTime ) < pauseTime ) {
    //do nothing... we're effectively pausing here...
}