Flash Actionscript指令碼的執行順序

來源:互聯網
上載者:User
指令碼|執行 做了一下Flash指令碼執行順序狀況的測試,總結出以下幾條規則:
1.先執行幀指令碼,再執行該幀中的影片剪輯中幀指令碼.
2.同一幀中不同圖層的幀指令碼的執行順序是從上層圖層至下層圖層;
3.不同影片剪輯中的幀指令碼執行順序是根據其載入順序來的.通常下在同一幀中不同圖層內的影片剪輯指令碼以自下層圖層至上層圖層;
4.由於非指令碼建立的影片剪輯最先載入,所以先執行非指令碼建立的影片剪輯中的指令碼,再執行由指令碼建立的影片剪輯中的指令碼,指令碼建立的影片剪輯遵循"先建立/載入,先執行"的原則;
5.非指令碼建立的影片剪輯的載入順序是由深度低至深度高.
6.gotoAndPlay語句如果是跳轉到同一影片剪輯中的某一幀,則該語句後面的語句還會執行,如果是跳轉到其它影片剪輯(比如:_parent.gotoAndPlay(n)),則其後的語句不會執行.

上面的規則有點兒像繞口令,我們來看一個例子,這個例子我就不給源檔案了:
1.建立一Flash文檔,插入一個新圖層,這樣一共有兩個層.
2.在兩個圖層中各插入一句:trace("這是圖層一/二");
3.測試.
可以看到上面的圖層先輸出.交換圖層位置可以驗證.

我們繼續:
1.建立一個MC,在MC裡第一幀寫上:trace("這是影片剪輯"+this._name);
2.在兩個圖層中各拖入一個MC.
3.執行.

繼續:
1.把兩個MC放到同一圖層中.
2.改變MC的排列順序,分別測試.

繼續:
1.插入第二幀.
2.在第二幀中寫:gotoAndStop(1);trace("這是第二幀");
3.測試.

繼續:
1.修改MC,在MC中加入第二幀.
2.在第二幀中寫:_parent.gotoAndStop(1);trace("這是影片剪輯中的第二幀");
3.將主情境中原先的兩個MC刪除.
4.在主情境第二幀的代碼刪除,新加上:stop();
5.將MC向第二幀中拖入一個.
6.執行.

由此可以驗證上面的規則.

提醒一點:
由於執行順序是由上圖層至下圖層,所以如果指令碼中有#include,應放到上圖層中.這樣其中的函數或變數才能被下圖層的指令碼引用.

最後建議:
為了不被Flash的執行順序搞暈,請按照OO的思想編寫作品,gotoAndPlay使用適當,變數的引用也最好有封裝性,不要在不同的影片剪輯中引用同一個變數,全域變數盡量不用.Flash並沒有規則一定要怎樣書寫指令碼才算合格,但是為了工作的方便,請注意規範寫法.否則考慮指令碼的執行順序就夠受的了.下面幾個原則不妨遵守一下:

1.勤寫注釋.
2.指令碼寫在一幀中,不同段的指令碼用注釋分開.
3.指令碼寫在幀中,事件處理器不要加到按鈕/影片剪輯上.
4.不使用全域變數.
5.不直接在函數中引用某一影片剪輯,而改用參數引用.
6.不要頻繁使用gotoAndPlay.
7.常用的函數寫到主情境的幀上,或者寫到外部檔案中再include.
8.影片剪輯裡幀中如果有函數,不如為該影片剪輯自訂一個類再用AS2.0類連結.把該函數作為類的一個方法.影片剪輯中的變數亦是如此.
9.除非兩段影片真的毫無關係,否則慎用多情境.

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。