hi,鳥籠山的朋友們,這次我們開始介紹AS3.0中的類如何和庫中元件綁定,和特殊的Document Class設計。
總共4步:
1.建一個標準的AS3.0類 (暫命名為KingdaMC,多么偉大的名字啊,簡稱“有名”)
2.新建一個元件,并設置它的Linkage和上面的類綁定。
3.在時間軸上寫代碼,用AS3.0代碼創建n份“有名”。
4.刪掉時間軸上代碼,使用Flash 9新特色Document Class在舞臺上創造n份“有名”。just 體驗一把。
(寫起來才知道要講的內容多啊,暈,打了兩個小時,累了,本節專門只講講AS3.0的類吧,其余的慢慢再講)
在創建AS3.0之前,請允許我先對AS3.0類的語法和繼承設計表示敬意。與標準的完全兼容,更好更嚴格的封裝特性,特別是命名空間(name space)的引入。從今天起從AS3.0起, 在OOP層面上,AS3.0已經和Java,C#平起平坐了,甚至在某些方面(比如name space)比java更有意思。
讓俺對AS2.0老鳥說幾句憋在心里的激動之語:
如果說AS2.0只是外表接近OOP標準語言,內在還是亂糟糟的AS1.0腳本語言,那么AS3.0不論是從OOP設計級別,還是從編譯器級別(如,對弱引用—— week reference—— 的支持)來評估的都是標準、正宗、強大的語言。
從AS3.0起,我們ActionScript 開發者可以挺起胸口,俺們是真正的行業標準級程序員。
在我繼續教程之前,我要唱首歌給大家聽:
AS3的英明,絕對不是一句兩句能說清!~~~~~~
打完,收工。
1.建立AS3.0類文件,
類文件是干嘛用的?比如說,我們想讓一個對象(Object)有很多功能,比如說這個對象是MovieClip型的,支持拖拽,支持雙擊等等。那么先在一個類文件里寫清楚這些要求和實現方法,然后就可以用這個類創建許多實例,這些實例就全具有了這些功能。寫一次,就能用很多次,多好。最重要的是它還可以通過繼承來重用很多代碼,為將來節省更多的時間。
廢話少說,Ctrl+N打開“新建”窗口,選擇建立“ActionScript file”,Ctrl+S,暫存為"KingdaMC.as"文件。(即“有名”的類文件)。
輸入如下代碼:
//【黑羽】ActionScript 3.0系列教程(2)
// http://www.kingda.org
//代碼如下//package 見講解1
package {
import flash.display.MovieClip; //講解2
import flash.events.MouseEvent;
//講解3
public class KingdaMC extends MovieClip {
public function KingdaMC() {
trace("Kingda created: " + this.name);
this.buttonMode = true;
this.addEventListener(MouseEvent.CLICK, clickHandler);
this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener);
this.addEventListener(MouseEvent.MOUSE_UP, mouseUpListener);
}
private function clickHandler(event:MouseEvent):void {
trace("You clicked the ball");
}
function mouseDownListener(event:MouseEvent):void {
this.startDrag();
}
function mouseUpListener(event:MouseEvent):void {
this.stopDrag();
}
}
}
講解1: AS2.0中我們使用的是全飾名稱來聲明類,通俗說,包括了類的路徑在類名前。AS3.0則把路徑提取出放在package這個關鍵字后面。本文例子中的類文件和Fla文件在同一個目錄下,因此 package后面沒有什么東西。如果類文件在 org目錄下的kingda目錄里,那么就要寫成
// ActionScript 2.0
class org.kingda.KingdaMC {
}
// ActionScript 3.0
package org.kingda {
public class KingdaMC {}
}
你在package中可以定義好幾個類,不用再寫全飾名稱了。但我不推薦這樣做。一個文件一個類比較好管理。
講解2:
MovieClip類再也不像AS2.0那樣是默認的全局類了。你要使用MovieClip類一定要寫這一句導入。
講解3:
類在AS3.0中也有public 和 internal的區分了。
public 表示這個類可以在任何地方導入使用。
internal表示這個類只能在同一個package里面使用。
不寫,就默認為internal這個新的關鍵字。
還有一個屬性是final,表示這個類不能被繼承了,繼承樹到此為止。
說白了,這三個屬性都是用來讓我們更加規范的管理類之間的關系,以便將來修改時心里有譜,大大的方便了修改。
同時,對架構的設計能力要求更高,新手們和小項目還是多使用public吧。越到后來你會越喜歡internal的。我只要看到internal和private這兩個關鍵字,心中就無比的穩定和舒服。想來不少programmer和我都會有同感吧。
2.新建一個元件,并設置它的Linkage和上面的類綁定。
和教程第一章一樣,畫一個方塊,按F8轉成MovieClip,再在庫中右鍵點擊它,選擇"linkage"

點擊看大圖。
在Class里面寫上KingdaMC。注意,id輸入框已經被廢止了。因為在AS3.0中,再也沒有MovieClip.attachMovie(), MovieClip.createEmptyMovieClip(), 以及 MovieClip.createTextField()的存在了。
所有舞臺的可見對象都由new來創建。
比如說本例中,symbol1綁定了KingdaMC,那么如果我要在舞臺上創建一個KingdaMC,只要寫
var b1:Kingda = new KingdaMC();
addChild(b1);
即可。
還記得以前那些亂七八糟的創建影片和組件的語法嗎?什么createClassObject(),DepthManager的createChildAtDepth(),createClassChildAtDepth(),等等等等。我的一個java同事剛剛學習AS時,被上面哪些亂亂的創建函數弄得一頭霧水。統統沒有了。只有一統天下的new ClassName(),多標準哪,多舒服啊,多好學啊。
所以說,沒學AS2.0直接學AS3.0絕對是新手的福氣。
第二句,addChild這個很重要。
光有第一句new可不行。那只是告訴Flash我建了一個名字叫b1的KingdaMC要顯示,但還沒告訴Flash什么時候顯示呢。
你什么時候打addChild(b1),那Flash才會把它顯示在舞臺上。怎么樣,多簡單。
其實這里省略了一個this。如果你有一個MovieClip名叫BigKingda,希望在這個BigKingda里面加上一個KingdaMC實例,那么就要寫
BigKingda.addChild(b1);
非常簡單。
Ctrl+Enter測試,發現創建的KingdaMC,支持拖拽。
大家試著用代碼多創建幾個KingdaMC,比如用for循環來建個10個8個的來玩玩。
好了,累了,要歇歇了,下次講Document Class。