AS3.0 建立函數執行佇列




殿堂之路這本書有提到使用函數的技巧,忙裡偷閒來練習一下。
場景上有三個影片片段,依照按下按鈕的順序依續播放,一個播放完了之後,才會播放下一個。

var funAry:Array=new Array();
var quee:int=0;//剩餘要執行的工作數量
function enterFrameFun(e:Event){
e.target.currentFrame_txt.text=String(e.target.currentFrame);
if(e.target.currentFrame==e.target.totalFrames){
e.target.gotoAndStop(1);
e.target.currentFrame_txt.text="1";
e.target.removeEventListener(e.type,arguments.callee);
quee--;//一個播放完了,工作數量減1
playNow();//播放下一個
}
}
var funA:Function=function(){
mcA.gotoAndPlay(1);
mcA.addEventListener(Event.ENTER_FRAME,enterFrameFun);
}

var funB:Function=function(){
mcB.gotoAndPlay(1);
mcB.addEventListener(Event.ENTER_FRAME,enterFrameFun);
}
var funC:Function=function(){
mcC.gotoAndPlay(1);
mcC.addEventListener(Event.ENTER_FRAME,enterFrameFun);
}

btnA.addEventListener(MouseEvent.CLICK,function(e:Event){
addQuee(funA);
});
btnB.addEventListener(MouseEvent.CLICK,function(e:Event){
addQuee(funB);
});
btnC.addEventListener(MouseEvent.CLICK,function(e:Event){
addQuee(funC);
});
function addQuee(fun:Function){//將工作排入序列中
quee++;
funAry.push(fun);
if(quee==1){//工作數量=1,表示目前沒有播放
playNow();//立即播放
}
}
function playNow(){//把存在序列的工作取出,並且執行
if(funAry.length>=1){
var fun=funAry.shift();
fun();
}
}


原檔下載
Category:

0 意見: