0

我有 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;
}
4

1 回答 1

1

诀窍是,您的函数本身应该在启动-停止模式下工作,以便您停止流程执行。这是因为 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;
}
于 2013-08-01T11:10:58.923 回答