2010年1月21日 星期四

以複製圖像證實AS3.0中gotoAndStop的即時性

問題與結果
會寫這篇主要是因為對於gotoAndStop語法是否執行狀態感到質疑
gotoAndStop究竟是在AS執行中改變圖片影格?
還是在程式完成一輪後再執行?

在這裡我以複製圖像的方式實驗已證明
gotoAndStop是在下指令後立刻執行的

實驗內容
寫了簡單的複製圖片函式"PicCopy"
function PicCopy(PutMC,DrowMC,X:Number=0,Y:Number=0){
    var BitD:BitmapData=new BitmapData(DrowMC.width,DrowMC.height);
    BitD.draw(DrowMC);
    var Bmp:Bitmap = new Bitmap(BitD);
    Bmp.x=X;
    Bmp.y=Y;
    PutMC.addChild(Bmp);
}

參數是 : ( 放置圖片的影像片段 , 要複製的影像片段 , x位置 , y位置 )











然後讓gotoAndStop與PicCopy交錯放置
PicCopy(this,DecObj,50,20);
DecObj.gotoAndStop(2);
PicCopy(this,DecObj,50,100);
DecObj.gotoAndStop(3);
PicCopy(this,DecObj,50,180);
PS. DecObj是個影片片段 其中有3個影格 每個影格都不同










會發現複製到的圖片是不一樣的如下圖











因此能證明gotoAndStop是在下指令後立刻執行的!

延伸問題
既然影格切換是立刻執行的...
那影格內的程式也是嗎?
答案是否定的 !

我們實驗看看...
首先在DecObj物件裡的每個影格上放入"trace"輸出指令
影格1放入trace(1);
影格2放入trace(2);
影格3放入trace(3):
執行後會發現輸出三次"3"
這證明了指令完成一輪後才執行物件內指令
又因gotoAndStop讀了3次而有3次的輸出