Actionscript 3 算法在flash中暂停

Actionscript 3 算法在flash中暂停,actionscript-3,flash,Actionscript 3,Flash,我有3个按钮,播放,暂停和下一步。当我点击播放按钮时,一个函数被调用(长时间执行)。我想点击“暂停”按钮,这样代码就会停止。下次我要单击“播放”时,我希望它从停止的位置继续播放 我还希望“下一步”按钮执行下一行代码,然后暂停。 起初我试图用一个按钮停止一个功能,但我卡住了 var nrs,nrst:int; nrs=1; nrst=0; import flash.events.MouseEvent; butt.addEventListener(MouseEvent.CLICK, cont); q

我有3个按钮,播放,暂停和下一步。当我点击播放按钮时,一个函数被调用(长时间执行)。我想点击“暂停”按钮,这样代码就会停止。下次我要单击“播放”时,我希望它从停止的位置继续播放
我还希望“下一步”按钮执行下一行代码,然后暂停。

起初我试图用一个按钮停止一个功能,但我卡住了

var nrs,nrst:int;
nrs=1;
nrst=0;
import flash.events.MouseEvent;
butt.addEventListener(MouseEvent.CLICK, cont);
qwe.addEventListener(MouseEvent.CLICK, conts);

function chs():Boolean
{
    if (nrs==1) return true; else return false;
}

function cont(event:MouseEvent):void
{

    while (chs()==true)
    {
        nrst++;
        nrst=nrst%1234;
        str.text=nrst.toString();
    }
}
function conts (event:MouseEvent):void
{
    nrs=0;
}

诀窍是,您的函数本身应该在start stop模式下工作,以便srop进程执行。这是因为Flash事件引擎要求事件侦听器在启动另一个事件之前实际结束。我已经用以下方法解决了这个问题:创建一个enterframe侦听器,在其中执行一个函数周期(确保在周期之间没有使用本地变量!),然后退出侦听器。创建一组变量(最好使用一个,但它对性能不友好),该循环将在每次运行时更新。或者像您尝试过的那样通过全局变量/函数控制循环执行,或者添加/删除侦听器本身。全局标志更好,因为您可能会意外地添加两个侦听器,并且可能会使进程出错。在您的简单案例中,结构如下所示:

butt.addEventListener(MouseEvent.CLICK, conts2);
qwe.addEventListener(MouseEvent.CLICK, conts);
this.addEventListener(Event.ENTER_FRAME,cont);

function chs():Boolean
{
    if (nrs==1) return true; else return false;
}

function cont(event:Event):void
{
    if (chs()) // IF, not WHILE, so that events could still be parsed
    {
        nrst++;
        nrst=nrst%1234;
        str.text=nrst.toString();
    }
}
function conts (event:MouseEvent):void
{
    nrs=0;
}
function conts2(e:MouseEvent):void {
    nrs=1;
}

是的,如果您想逐行执行代码,请使用调试器。