構(gòu)造函數(shù)(Constructor)
構(gòu)造函數(shù)是指一個(gè)名字與類名相同的方法。當(dāng)該類被實(shí)例化時(shí),該函數(shù)會(huì)被自動(dòng)調(diào)用,也可以傳入?yún)?shù),例如: 首先,創(chuàng)建一個(gè)類:
package { public class MyClass { public function MyClass(arg:String) { trace("constructed"); trace("you passed " + arg); } } }
然后,假設(shè)工作在 Flash CS3 IDE(集成開發(fā)環(huán)境)中,在時(shí)間軸上創(chuàng)建該實(shí)例:
var myInstance:MyClass = new MyClass("hello");
結(jié)果輸出: constructed you passed hello
繼承(Inheritance)
一個(gè)類可以從另一個(gè)類中繼承(inherit)和擴(kuò)展(extend)而來。這就意味著它獲得了另一個(gè)類所有的屬性和方法(除了那些被 private 掩蓋住的屬性)。所生成的子類(派生類)還可以增加更多的屬性和方法,或更改父類(基類)已有的屬性或方法。要分別創(chuàng)建兩個(gè)類來實(shí)現(xiàn)(兩個(gè)獨(dú)立的 .as文件),例如:
package { public class MyBaseClass { public function sayHello():void { trace("Hello from MyBaseClass"); } } }
package { public class MySubClass extends MyBaseClass { public function sayGoodbye():void { trace("Goodbye from MySubClass"); } } }
不要忘記,每個(gè)類都必須在其自身的文件中,文件名為該類的類名,擴(kuò)展名 .as,所以必須要有 MyBaseClass.as 文件和 MySubClass.as 文件。因此,在使用 Flash CS3 IDE 時(shí),保存的 FLA 文件,要與這兩個(gè)類在同一個(gè)文件夾。 下面代碼會(huì)生產(chǎn)兩個(gè)實(shí)例,把它寫入時(shí)間軸看看會(huì)發(fā)生什么:
var base:MyBaseClass = new MyBaseClass(); base.sayHello(); var sub:MySubClass = new MySubClass(); sub.sayHello(); sub.sayGoodbye();
第一個(gè)實(shí)例沒什么可說的,值得注意的是第二個(gè)實(shí)例中的 sayHello 方法,雖然在 MySubClass 中沒有定義 sayHello,但它卻是繼承自 MyBaseClass 類的。另一個(gè)值得注意的是,增加了一個(gè)新的方法 sayGoodbye,這是父類所沒有的。 下面說說,在子類中如何改變一個(gè)父類中已存在的方法。在 AS 2 中,我們可以只需要重新定義這個(gè)方法就可以了。而在 AS 3 中,則必需明確地寫出 override 關(guān)鍵字,來進(jìn)行重新定義。
package { public class MySubClass extends MyBaseClass { override public function sayHello():void { trace("Hola from MySubClass"); } public function sayGoodbye():void { trace("Goodbye from MySubClass"); } } }
請注意,原來的 sayHello 方法被重寫,再調(diào)用 MySubClass 后,就有了新的信息。另外,私有成員也不能被重寫,因?yàn)樗鼈冎荒鼙凰鼈冏陨淼念愒L問。
MovieClip/Sprite 子類
我們可以自己寫一個(gè)類,然后讓另一個(gè)類去繼承它。在 AS 3 中,所有代碼都不是寫在時(shí)間軸上的,那么它們一開始都要繼承自 MovieClip 或 Sprite。 MovieClip 類是影片剪輯對象屬性和方法的 ActionScript 模板。它包括我們所熟悉的屬性如:影片的 x,y 坐標(biāo),縮放等,這些在 AS 3 中的變化不大。
AS 3 還增加了 Sprite 類,通常把它理解為不在時(shí)間軸上的影片剪輯。很多情況下,只使用代碼操作對象,并不涉及時(shí)間軸和幀,這時(shí)就應(yīng)該使用 Sprite 這個(gè)輕型的類。如果一個(gè)類繼承自 MovieClip 或 Sprite ,那么它會(huì)自動(dòng)擁有該類所有的屬性和方法,我們還可以為這個(gè)類增加特殊的屬性和方法。
例如,游戲設(shè)計(jì)一個(gè)太空船的對象,我們希望它擁有一個(gè)圖形,并且在屏幕的某個(gè)位置移動(dòng),旋轉(zhuǎn),并為動(dòng)畫添加 enterFrame 偵聽器,還有鼠標(biāo)、鍵盤的偵聽等。這些都可以由 MovieClip 或 Sprite 來完成,所以就要繼承自它們。同時(shí),還可以增加一些屬性如:速度(speed)、油量(fuel)、損壞度(damage),還有像起飛(takeOff)、墜落(crash)、射擊(shoot)或是自毀(selfDestruct)等方法。那么這個(gè)類大概是這樣的:
package { import flash.display.Sprite; public class SpaceShip extends Sprite { private var speed:Number = 0; private var damage:Number = 0; private var fuel:Number = 1000; public function takeOff():void { //... } public function crash():void { //... } public function shoot():void { //... } public function selfDestruct():void { //... } } }
注意,首先要導(dǎo)入 flash.display 包中的 Sprite 類,如果要導(dǎo)入MovieClip類,同樣也需要導(dǎo)入這個(gè)相同的包 flash.display.MovieClip 類。
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
上一頁 ActionScript 3.0 動(dòng)畫基礎(chǔ) [1] 下一頁 ActionScript 3.0 動(dòng)畫基礎(chǔ) [3]
◎進(jìn)入論壇RIA設(shè)計(jì)與應(yīng)用版塊參加討論
|