切入正題,我們逐步開局:
一、建立文檔類(Document Class)
現(xiàn)在我們可以開始建立Document Class了。Flash CS3方便地提供了一個“編輯圖標”,你可以方便地打開類文件。回憶一下,上一篇文章提到關(guān)于類的書寫:每一個類都應(yīng)該在一個package中。我個人的理解,覺得Document Class 應(yīng)該在一個單獨的、無具體名稱的“generic”package中,即:
package { import flash.display.Sprite; public class MyMainClass extends Sprite { public function MyMainClass() { init(); } private function init() { // do sth } } } // We can even use some help classes class MyMainClassHelper{}
這里,我們就成功“開局”了。 注意,這個文檔類必須為public 的。而輔助類則不能定義為public、private 的,必須是internal 的。文檔類必須繼承自Sprite 或者MovieClip。因為這個文檔類代表了這個swf,顯然swf 是一個需要在屏幕上渲染顯示(flash.display.DisplayObject)并提供資源承載能力(flash.display.InteractiveObject)的基礎(chǔ)容器。
二、邏輯開局(Initialize the logic)
我們所有的邏輯入口都是從這個類的構(gòu)造函數(shù)開始的。AS3的loading有一些麻煩,我們暫時跳過(稍后會介紹)。
構(gòu)造函數(shù)一般要保持簡潔,不妨用流行的init 方式開局,即在構(gòu)造函數(shù)內(nèi)調(diào)用一個init 函數(shù)。記住一點,AS3中,“_root”已死,這里就是傳統(tǒng)意義上的“_root”了。你看到的這個類(文檔類),第一反應(yīng)應(yīng)該是這個swf 文件(就如同你原來看到“_root”就應(yīng)該反應(yīng)到swf 文件一樣)!在這里可以找到原來我們需要的許多資源,例如我們可以找到通過loaderInfo:LoaderInfo 屬性(繼承自DisplayObject),獲取外部參數(shù):xxx.swf ?somevar=1傳進來的“somevar”,也可以通過stage:Stage屬性(繼承自DisplayObject),來進行原來的Stage類的各種操作。我也可以用contextMenu:ContextMenu 屬性(繼承自InteractiveObject),來控制flash右鍵菜單的內(nèi)容。
這一切都在文檔類的init以及其他所屬方法中進行。所有的其它功能,可以封裝成別的類、包進行“模塊式”調(diào)用。
三、事件機制(The new Event System)
習慣新的事件機制所花的勇氣,我認為和開局相當。
我曾經(jīng)熱衷于xxx_mc.onRelease = function(){}的寫法,而且做過N多這樣的項目。然而當我真正開始用addEventListener 的時候,才發(fā)現(xiàn)這是多么優(yōu)雅的寫法。
優(yōu)雅在哪: 1. 統(tǒng)一:只有addEventListener,沒有addListener、沒有on(…),代碼可以統(tǒng)一地放置。 2. 清晰:事件處理函數(shù)作為類的方法(Methods)列舉分明,試想一個跟在onXXX后面的賦值函數(shù)放在代碼當眾多難找。 3. 信息翔實、準確:新的事件機制通過傳遞Event對象讓事件的信息完整無漏地傳達給接受方;函數(shù)(方法)與類綁死,Delegate終于可以光榮退休了。
四、總結(jié)
1. 接受新的OOP開發(fā)體系:類/對象(class/object)+構(gòu)造函數(shù)(constructor)+成員屬性(properties)+成員方法(methods),除了這些東西以外,ActionScript 沒有別的存在形式!把時間軸和實例上的代碼都忘記吧!
我們要“擁抱”類的概念!AS3中所有的一切圍繞著類的概念進行。swf就是一個類,用Flex開發(fā),叫做Application,用CS3,叫做 Document Class(往往繼承自Sprite)。任何變量(屬性)都屬于一個類,MovieClip有成員屬性currentScene,它是Scene 類的一個實例;Sprite有成員屬性contextMenu和stage,它們繼承自DispatchObject 類,分別是ContextMenu 類和 Stage 類的實例。
2. 沒有_root,所有的_root 有關(guān)的操作,封裝到文檔類中的成員函數(shù)(方法)進行。_root不再是swf 的代表,取而代之的是Document Class(或者Flex中的Application Class)
3. 功能模塊化、分離: 不要把所有的事情都塞到文檔類中去做,哪怕你可以定義很多輔助類,畢竟獨立出來的文件更加便于管理、集成、再使用。而且界面(圖形、動畫)和代碼要分離(事實上AS3的Document Class 和addChild 的內(nèi)容管理體系幫我們完成了這個操作)。無論你是一個人搞定代碼+設(shè)計還是有一個團隊協(xié)作分工編程與動畫。分離的好處是讓你的功能更加強大和易維護。
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2744560-1-1.html
本文鏈接:http://www.95time.cn/tech/multimedia/2007/4704.asp
出處:藍色理想
責任編輯:elesa
上一頁 從AS1/2 到AS3的觀念轉(zhuǎn)變 [1] 下一頁
◎進入論壇Flash專欄版塊參加討論
|