有時間,有興趣,E文還行的可以直接上這看:http://www.kirupa.com/developer/oop2/AS2OOPindex.htm,很長,很詳細(xì)。
我簡單地把我理解的說一下,錯誤在所難免,不嗇賜教,共同進(jìn)步
引用張圖先:
所有的類都是在外部定義,當(dāng)然如果要使用它們的話,需要設(shè)置一下類路徑,點(diǎn)擊發(fā)布設(shè)置->actionscript2設(shè)置,在類路徑里添加你要使用的類路徑就行了,當(dāng)然如果你希望每個flash都使用那些類,那么可以在"編輯->首選項(xiàng)->actionscript2設(shè)置"那添加類路徑。當(dāng)然如果只是圖個方便的話,直接放到當(dāng)前文件夾下面就可以了。
在一個.as文件里只能有一個class,而且這個class的name必須和文件名相同。比如有一個motion.as,那么就必須定義一個motion類:
//motion.as class motion extends MovieClip{ function motion(){ // constructor } }
看起來比較死板,但管理起來確實(shí)方便了不少。
可以建立一個構(gòu)造函數(shù)(就是跟class同名的函數(shù)),這樣實(shí)例化的時候就可以調(diào)用該函數(shù)。
變量的類型
支持private,static和public,private不允許外部訪問和修改,但可以被children讀寫(所以相當(dāng)于protected),默認(rèn)如果用var聲明的話,是public,static可以不用實(shí)例化,直接使用。
函數(shù)的類型
跟變量的類型一樣,也是private,static和public三種,static聲明的可以直接使用,比如Math.random()。靜態(tài)函數(shù)只能使用靜態(tài)變量,其他類型的函數(shù)不受影響。
再來講講interface,給我的感覺,interface就是為了方便多人協(xié)作,避免某些函數(shù)沒有被聲明。
//simpleInterface.as interface simpleInterface { function head(); function body(); function foot(); //myClass.as class myClass implements simpleInterface { function head(){ trace("I'm head"); } function body(){ trace("I'm body"); } function foot(){ trace("I'm foot"); } }
繼承
繼承的類擁有父類的所有方法和變量(通過extends實(shí)現(xiàn))
//ball擁有mc的所有方法,同時還有自己的fly方法 //ball.as class ball extends MovieClip{ private var height:Number; function fly(){ trace("I can fly "+height+" m"); } function ball(h){ height = h; } } //時間軸 myball = new ball(30); myball.fly();//trace "I can fly 30 m"
關(guān)于構(gòu)造函數(shù)
如果子類的構(gòu)造函數(shù)沒有顯示調(diào)用父類的構(gòu)造函數(shù),那么flash會自動給你加上,當(dāng)然也可以通過super()手動加上
也可通過super去調(diào)用父類的其他方法,比如super.parentMethod();
如果想讓舞臺上的某個mc使用我們自定義的類的話,在鏈接處的class里天上類名就可以了:
最后來說說文件的管理,最好是新建一個項(xiàng)目,這樣查看起來非常方便。
好了,就說這么多了,有時間附上個demo。
歡迎討論。
附個小demo
ball.as
class ball extends MovieClip { private var spring:Number = 0.1; private var friction:Number = 0.95; private var centerX = (Stage.width-this._width)/2; private var v:Number = 0; public function ball() { _x = 0; _y = Stage.height/2 - _height/2; this.onEnterFrame = this.start_spring; } private function start_spring() { var a:Number = (centerX - _x)*spring; v += a; //v *= friction; _x += v; } }
在當(dāng)前路徑下,新建一個mc,然后按下圖:
最后ctrl+enter就能看到效果了。
源文件下載:ball.rar
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2825718-1-1.html
本文鏈接:http://www.95time.cn/tech/multimedia/2008/5292.asp
出處:藍(lán)色理想
責(zé)任編輯:moby
◎進(jìn)入論壇RIA設(shè)計與應(yīng)用版塊參加討論
|