2013-08-01 71 views
0

我有3個按鈕,播放,暫停和下一個。當我點擊播放按鈕時,一個函數被調用(長時間執行)。我想單擊「暫停」按鈕,以便代碼停止。下次我想點擊「播放」時,我希望它從停止的地方繼續。
另外我想「下一步」按鈕執行下一行代碼,然後暫停。

起初,我試圖阻止的功能與按鈕,但我卡住
算法在flash中暫停

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

是的,如果要逐行執行代碼,請使用調試器。 – Vesper

回答

1

的訣竅是,你的功能啓停模式應該工作本身就是爲了讓你srop過程執行。這是因爲Flash事件引擎需要事件偵聽器在另一個事件啓動之前實際結束。我已經通過以下方法解決了這個問題:創建一個框架監聽器,在其中執行一個函數循環(確保沒有使用應該在循環之間可用的局部變量!)並退出監聽器。創建一組變量(最好使用一個,但不是性能友好的),這個循環每次運行時都會更新。通過全局變量/函數控制循環執行,就像您嘗試的那樣,或者添加/刪除監聽器本身。全球標誌更好,因爲您可能會無意中添加兩個聽衆,並可能會搞砸這個過程。在你的簡單情況下,結構將如下所示:

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; 
}