代码之家  ›  专栏  ›  技术社区  ›  Robert Claypool

如何在ActionScript中停止执行

  •  6
  • Robert Claypool  · 技术社区  · 15 年前

    在actionscript中是否有任何方法可以停止执行,例如sleep()方法?

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

    4 回复  |  直到 13 年前
        1
  •  3
  •   Community CDub    8 年前

    不,没有睡眠。对不起的。

    有关选项,请参阅此处的答案: ActionScript: pushing a closure onto the event stack? . 它不讨论睡眠,但我尝试提供延迟函数调用的概述。

        2
  •  1
  •   Tom    13 年前

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

    说了这些,你 能够 通过使用blocking方法externalinterface.call和在javascript中执行blocking方法(如xhr请求)来实现这一点。

    但绝对是白痴,所以不要这样做。

    也许你需要的是 Timer .

        3
  •  0
  •   Theo.T    15 年前

    没有办法像在PHP中那样暂停应用程序的所有执行,但是有解决方法(除非您有意设置断点或创建运行时错误,否则不要认为这就是您的意思)。这可能是因为通常情况下,Flash应用程序只需要在一个“帧”内执行所有脚本。

    当用户不关注某个网站时,通常能够“暂停”该网站的动画。这可以通过监听event.deactivate来实现,然后移除进入帧侦听器并终止所有正在进行的进程。

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

        4
  •  -4
  •   geraldalewis    15 年前

    是的,虽然知道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...
    }