ActionScript 3.0系列教程(2):AS3.0的類及綁定
ActionScript 3.0系列教程(3):Document Class特色為我們帶來了什么?
Document Class,中文直譯為“文檔類”。顧名思義,就是和文檔綁在一起的類。 文檔是啥?就是要和這個類綁在一起的Fla文件。
什么用處? 這個玩意兒根本目的就是想把AS代碼和Flash設(shè)計完全剝離。 從此,F(xiàn)la里面只管設(shè)計,邏輯代碼全部由外部的類來包辦。
對于設(shè)計者和新手,黑羽可以打個比方,就好比三步走:
1.把Fla里面所有代碼集中到第一幀, 2.再把第一幀里的代碼拷貝到外部的一個as文件里。 3.再按照AS3.0的形式,把這些代碼放到這個類的構(gòu)造函數(shù)里去。再根據(jù)這些個代碼抽出一些類的屬性和方法就OK了。
唔,這個比喻有很多小毛病。但比較直觀,比較好理解,一步步來。 等你明白有哪些小毛病了,你已經(jīng)不需要這個破比喻了。
對于程序開發(fā)者(比如c#) Document Class就好比一個Entry,它的構(gòu)造函數(shù)就相當于一個main函數(shù)。
教程相關(guān)例子下載:點擊下載
先來一個例子:
上次建立的KingdaMC.fla和KingdaMC.as還在吧? 刪了?重來一遍吧,本次要用到fla里面的加好鏈接類的元件,以及相關(guān)的KingdaMC類文件。
我們干兩件事:
1.新建一個Document Class類。 2.用上之前的那個Kingda.fla,綁定Document Class
1.新建一個as文件,命名為KingdaMCDocumentClass,記得要和fla在同一目錄下: 輸入如下代碼:
//因為在統(tǒng)一目錄下,所以package后面沒有路徑 package { import flash.display.MovieClip; public class KingdaMCDocumentClass extends MovieClip { private var tempMC:KingdaMC; //臨時變量,持有當時創(chuàng)建的KingdaMC的引用。 private var MAX_MCS:int = 10; //最多創(chuàng)建的KingdaMC數(shù)目 //構(gòu)造函數(shù),和類同名,在AS3.0中必須為public。不能用private,protected或者自定義的namespace public function KingdaMCDocumentClass() { var i:int; //新的數(shù)據(jù)類型int,只要是整數(shù),就請用int。效率快過Number。 for (i = 0; i < MAX_MCS; i++) { tempMC = new KingdaMC (); //以下兩行定義創(chuàng)建的KingdaMC形狀大小隨機 tempMC.scaleX = Math.random(); tempMC.scaleY = tempMC.scaleX; //以下兩行定義創(chuàng)建的KingdaMC位置在舞臺上隨機。 tempMC.x = Math.round(Math.random() * (this.stage.stageWidth - tempMC.width)); tempMC.y = Math.round(Math.random() * (this.stage.stageHeight - tempMC.height)); addChild(tempMC); } } } }
它要干的事很簡單,就是用我們之前的KingdaMC類在舞臺上創(chuàng)建十個KingdaMC實例,大小隨機,位置隨機。
2.用上之前的Kingda.fla,綁定KingdaMCDocumentClass。 確保庫中已有設(shè)好KingdaMC類鏈接的symbol。
設(shè)置方法如圖:
點擊放大
先把第一幀代碼全部刪掉。Ctrl+Enter測試一把。是不是有十個MC出來啊。 然后再像圖中那樣加上第一幀代碼,和舞臺元件樂一樂。就是不按照Document Class規(guī)矩干干,呵呵。
那么它到底是什么? 簡單的說,是一個用來取代原有散亂的時間軸代碼的標準解決辦法。 當一個Fla文件被編譯時,Document Class就被主動建立了。我們可以理解為Flash IDE偷偷加上了如下代碼:
//path表示Document Class的包,如上一節(jié)中說過的org.kingda; //DocClass是指Document Class的名字 import path.DocClass; var TouTouDe:DocClass = new DocClass(); //實例名TouTouDe是我亂寫的,哈哈?赡苁悄J的instance1之類的名字
這樣的好處是所有的時間軸邏輯都剝離到Document Class類文件中,一旦成為一個獨立的類文件,那么很方便的可以和CVS軟件結(jié)合起來。對團隊合作(Designer + Coder)來說是一大利好。對新手和小項目來說,沒什么優(yōu)點和必要。
下面說點高級訊息和運用: 有什么壞處? 壞處大大的有。那是相當?shù)牟涣?xí)慣。 所有的舞臺上的元件都別直接用屬性來命名(比如說隨便命名為BigKingda),不然就會出現(xiàn)以下出錯訊息:
ReferenceError: Error #1056: 無法為 KingdaMCDocumentClass 創(chuàng)建屬性 BigKingda。
當然這個限制只在與舞臺上的元件,在元件類部直接命名子元件沒有問題,在Timeline寫相關(guān)的代碼沒問題。
重要:Document Class初始化順序怎樣? 黑羽個人的研究結(jié)果:一旦設(shè)置了Document Class,那么初始化順序如下: Document Class初始化 > 主時間軸代碼執(zhí)行 > 舞臺元件綁定的類初始化 > 元件的時間軸代碼初始化 >..
下面的層次按這樣的規(guī)律循環(huán)。
Ok了,三大特色到此詳細介紹完了。 盡量講的淺俗易懂,大家明白就好。而且黑羽也加上了一些高級訊息供老鳥參考。喜歡的頂一把!^_^
ActionScript 3.0系列教程(4):爽快使用XML
出處:藍色理想
責(zé)任編輯:moby
◎進入論壇Flash專欄版塊參加討論
|