子類化顯示對象
前面已經講過生成 Sprite 或 MovieClip 類的子類,對某個類進行子類化是非常有用的。首先,大家可能對 AS 3 取消 attachMovieClip 功能感到十分驚呀,如果這樣的話,我們怎么才能在 Flash CS3 IDE 庫中取出影片剪輯元件放入舞臺呢?答案是,使用一個繼承自 MovieClip 或 Sprite 的類。為了能夠好地解釋這個問題,簡單地介紹一下 IDE:
- 創(chuàng)建一個新的 FLA 文件,并在舞臺上繪制一些圖形。
- 選中圖形按下 F8 鍵轉換為元件。
- 在轉換為元件窗口中輸入一個名稱,并設置為影片剪輯類型。
- 選擇為 ActionScript 導出。
在以前的 Flash 版本中,可以自由地給出標識符或輸入一個類名。而在 Flash CS3 中,標識符一欄不可用了,類一欄會自動地填入默認值。這里還多出了基類一欄,默認為 flash.display.MovieClip,這里也可以填入繼承自 MovieClip 或 Sprite 的自定義類。
隨意輸入一個類名,不必擔心沒有這個類,然后點擊確定。這個地方很有趣,Flash 找不到這個類,它就會自動生成一個類,并對其進行編譯。并不是說 Flash 會創(chuàng)建一個 ActionScript 類文件,但它會在 SWF 中,生成一串字節(jié)代碼表示一個繼承自 Sprite 或 MovieClip 的類。除了繼承了基類,它什么都不會做,但它已經與庫中的元件連接上了。比如,你的類名為 Ball。在文檔類或時間軸上,可以這么寫:
var ball:Ball = new Ball(); addChild(ball);
這樣就在舞臺上創(chuàng)建了一個庫中的元件,就像 AS 2 的 attachMovie 方法一樣。我們要是能給出自定義的真正的類名及路徑的話,那么就可以讓元件附加很多功能。現在,我們跳出 Flash IDE 回到類的世界,看下一個示例。下面再看一個重定父級的示例,這里有一些重復的部分可以寫入另一個類中。看一下示例,假設已經創(chuàng)建了一個名為 parent1 的 Sprite 實例,要里面繪制正方形:
parent1.graphics.lineStyle(1, 0); parent1.graphics.drawRect(-50, -50, 100, 100);
下面再創(chuàng)建一個名為 parent2 的 Sprite 實例,同樣也是繪制一個正方形。當然這個例子毫無意義,但它可以告訴我們 Sprite 的子類是多么的有用。首先,我們建立一個名為 ParentBox 的類,并繼承自 Sprite,這樣一來,就擁有了繪制正方形的代碼:
package { import flash.display.Sprite; public class ParentBox extends Sprite { public function ParentBox() { init(); } private function init():void { graphics.lineStyle(1, 0); graphics.drawRect(-50, -50, 100, 100); } } }
然后,使用這個類創(chuàng)建兩個 ParentBox,這樣做比創(chuàng)建兩個 Sprite 對象要好得多。
package { import flash.display.Sprite; import flash.events.MouseEvent; public class Reparenting2 extends Sprite { private var parent1:ParentBox; private var parent2:ParentBox; private var ball:Sprite; public function Reparenting2() { init(); } private function init():void { parent1 = new ParentBox(); addChild(parent1); parent1.x = 60; parent1.y = 60; parent2 = new ParentBox(); addChild(parent2); parent2.x = 170; parent2.y = 60; ball = new Sprite(); parent1.addChild(ball); ball.graphics.beginFill(0xff0000); ball.graphics.drawCircle(0, 0, 40); ball.graphics.endFill(); ball.addEventListener(MouseEvent.CLICK, onBallClick); } public function onBallClick(event:MouseEvent):void { parent2.addChild(ball); } } }
作為 ParentBox 的實例,它們仍是 Sprite ,因此還可以再增加子影片, init 方法直接進行繪圖。雖然這個示例價值不大,但可以讓你學會這種思想,往后,會在書中看到更多更復雜的示例。你也許想自己動手創(chuàng)建一個球(Ball)類,用于繪制小球,雖然這么做不會減少代碼里,但是當你的類變得十分復雜時,把功能代碼分離到不同的類中,這絕對是個好辦法,它比將所有類寫在一起要好得多,同時還促進了代碼的重用性。那么現在就去創(chuàng)建這個 Ball 類吧,在日后的學習中還要用到呢。
出處:藍色理想
責任編輯:bluehearts
上一頁 ActionScript 3.0 動畫基礎 [5] 下一頁 ActionScript 3.0 動畫基礎 [7]
◎進入論壇RIA設計與應用版塊參加討論
|