會寫這篇主要是因為對於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次的輸出