做了一下Flash腳本執(zhí)行順序狀況的測試,總結(jié)出以下幾條規(guī)則:
1.先執(zhí)行幀腳本,再執(zhí)行該幀中的影片剪輯中幀腳本.
2.同一幀中不同圖層的幀腳本的執(zhí)行順序是從上層圖層至下層圖層;
3.不同影片剪輯中的幀腳本執(zhí)行順序是根據(jù)其加載順序來的.通常下在同一幀中不同圖層內(nèi)的影片剪輯腳本以自下層圖層至上層圖層;
4.由于非腳本創(chuàng)建的影片剪輯最先加載,所以先執(zhí)行非腳本創(chuàng)建的影片剪輯中的腳本,再執(zhí)行由腳本創(chuàng)建的影片剪輯中的腳本,腳本創(chuàng)建的影片剪輯遵循"先創(chuàng)建/加載,先執(zhí)行"的原則;
5.非腳本創(chuàng)建的影片剪輯的加載順序是由深度低至深度高.
6.gotoAndPlay語句如果是跳轉(zhuǎn)到同一影片剪輯中的某一幀,則該語句后面的語句還會執(zhí)行,如果是跳轉(zhuǎn)到其它影片剪輯(比如:_parent.gotoAndPlay(n)),則其后的語句不會執(zhí)行.
上面的規(guī)則有點兒像繞口令,我們來看一個例子,這個例子我就不給源文件了:
1.新建一Flash文檔,插入一個新圖層,這樣一共有兩個層.
2.在兩個圖層中各插入一句:trace("這是圖層一/二");
3.測試.
可以看到上面的圖層先輸出.交換圖層位置可以驗證.
我們繼續(xù):
1.新建一個MC,在MC里第一幀寫上:trace("這是影片剪輯"+this._name);
2.在兩個圖層中各拖入一個MC.
3.執(zhí)行.
繼續(xù):
1.把兩個MC放到同一圖層中.
2.改變MC的排列順序,分別測試.
繼續(xù):
1.插入第二幀.
2.在第二幀中寫:gotoAndStop(1);trace("這是第二幀");
3.測試.
繼續(xù):
1.修改MC,在MC中加入第二幀.
2.在第二幀中寫:_parent.gotoAndStop(1);trace("這是影片剪輯中的第二幀");
3.將主場景中原先的兩個MC刪除.
4.在主場景第二幀的代碼刪除,新加上:stop();
5.將MC向第二幀中拖入一個.
6.執(zhí)行.
由此可以驗證上面的規(guī)則.
提醒一點:
由于執(zhí)行順序是由上圖層至下圖層,所以如果腳本中有#include,應(yīng)放到上圖層中.這樣其中的函數(shù)或變量才能被下圖層的腳本引用.
最后建議:
為了不被Flash的執(zhí)行順序搞暈,請按照OO的思想編寫作品,gotoAndPlay使用適當(dāng),變量的引用也最好有封裝性,不要在不同的影片剪輯中引用同一個變量,全局變量盡量不用.Flash并沒有規(guī)則一定要怎樣書寫腳本才算合格,但是為了工作的方便,請注意規(guī)范寫法.否則考慮腳本的執(zhí)行順序就夠受的了.下面幾個原則不妨遵守一下:
1.勤寫注釋.
2.腳本寫在一幀中,不同段的腳本用注釋分開.
3.腳本寫在幀中,事件處理器不要加到按鈕/影片剪輯上.
4.不使用全局變量.
5.不直接在函數(shù)中引用某一影片剪輯,而改用參數(shù)引用.
6.不要頻繁使用gotoAndPlay.
7.常用的函數(shù)寫到主場景的幀上,或者寫到外部文件中再include.
8.影片剪輯里幀中如果有函數(shù),不如為該影片剪輯自定義一個類再用AS2.0類鏈接.把該函數(shù)作為類的一個方法.影片剪輯中的變量亦是如此.
9.除非兩段影片真的毫無關(guān)系,否則慎用多場景.
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。