我有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;
}
答案 0 :(得分:1)
诀窍是,您的函数本身应该在启动 - 停止模式下工作,以便您进行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;
}