天天看點

比較Flash AS3與AS2特性與功能

<P>【摘 要】<SPAN class=checkoutHeader><STRONG>本文介紹了ActionScript 3 相對于 ActionScript 2 有哪些新的特性和改動。并在文章的最後一步步的教大家如何利用 Flex Builder 來編譯并運作第一個 AS3 程式。文法方面的增強和改動。</STRONG></SPAN> <!-- 開始 主體内容 --></P> <UL> <LI>引入了 package(包) 和 namespace(命名空間) 兩個概念。其中 package 用來管理類定義,防止命名沖突,而 namespace 則用來控制程式屬性方法的通路。 <LI>新增内置類型 int (32比特整數),uint(非負32比特整數),用來提速整數運算; <LI>新增 * 類型辨別,用來辨別類型不确定的變量,通常在運作時變量類型無法确定時使用。在 AS2 中這種情況下需要用 Object 賴作為類型表識; <LI>新增 is 和 as 兩個運算符來進行類型檢查。其中 is代替 AS2 中的 instanceof 來查詢類執行個體的繼承關系,而 as 則是用來進行不抛錯誤的類型轉換。 <LI>新增 in 運算符來查詢某執行個體的屬性或其prototype中是否存在指定名稱的屬性。 <LI>新增 for each語句來循環操作 Array 及 Object執行個體。 <LI>新增 const 語句來聲明常量。 <LI>新增 Bound Method 概念。當一個對象的方法被付值給另外一個函數變量時,此函數變量指向的是一個 Bound Method,以保證對象方法的作用域仍然維持在聲明此方法的對象上。這相當于 AS2 中的 mx.util.Delegate 類,在 AS3 中這個功能完全内置在語言中,不需要額外寫代碼。 <LI>AS3 的方法聲明中允許為參數指定預設值(實作可選參數)。 <LI>AS3 中方法如果聲明傳回值,則必須明确傳回。 <LI>AS2 中表示方法沒有傳回值的 Void 辨別,在 AS3 中變更為 void。 </LI></UL>OOP方面的增強 <P></P> <P style="TEXT-INDENT: 2em">通過類定義而生成的執行個體,在 AS3 中是屬于 Sealed 類型,即其屬性和方法無法在運作時修改。這部分屬性在 AS2 中是通過類的 prototype 對象來存儲,而在 AS3 中則通過被稱為 Trait 的概念對象存儲管理,無法通過程式控制。這種處理方式一方面減少了通過 prototype 繼承鍊查找屬性方法所耗費的時間(所有父類的實作方法和屬性都會被直接複制到對應的子類的 Trait 中),另一方面也減少了記憶體占用量,因為不用動态的給每一個執行個體建立 hashtable 來存儲變量。如果仍然希望使用 AS2 中類執行個體在運作時的動态特性,可以将類聲明為 dynamic。api方面的增強 <UL> <LI>新增 Display API,使 AS3 可以控制包括 Shape, Image, TextField, Sprite, MovieClip, Video, SimpleButton, Loader在内的大部分 DisplayList 渲染機關。這其中 Sprite 類可以簡單了解為沒有時間軸的 MovieClip,适合用來作為元件等不需要時間軸功能的子類的基礎。而新版的 MovieClip 也比 AS2 多了對于 Scene(場景)和 Label(桢标簽)的程式控制。另外,渲染機關的建立和銷毀通過聯合 new 操作符以及 addChild/removeChild 等方法實作,類似 attachMovie 的舊方法已被舍棄,同時以後也無須去處理深度值。 <LI>新增 DOM Event API,所有 在DisplayList 上的渲染機關都支援全新的三段式事件播放機制,以 Stage 為起點自上而下的播報事件到 target 對象(此過程稱為 Capture Phase),然後播報事件給 target 對象(此過程稱為 Target Phase),最後在自下而上的播報事件(此過程稱為 Bubbling Phase)。 <LI>新增内置的 Regular Expressions (正規表達式)支援,使 AS3 能夠高效地建立、比較和修改字元串,以及迅速地分析大量文本和資料以搜尋、移除和替換文本模式。 <LI>新增 ECMAScript for XML (E4X)支援。 E4X 是 AS3 中内置的 XML 處理文法。在 AS3 中 XML 成為内置類型,而之前的 AS2 版本 XML 的處理 api 轉移到 flash.xml.*包中,以保持向下相容。 <LI>新增 Socket類,允許讀取和寫入二進制資料,使通過 AS 來解析底層網絡協定(比如 POP3, SMTP, IMAP, NNTP 等)成為可能,使 Flash Player 可以連接配接郵件伺服器和新聞討論區。 <LI>新增 Proxy 類來替代在 AS2 中的 Object.__resolve 功能。 <LI>新增對于 Reflect (反射)的支援,相關方法在 flash.util.* 包中。 </LI></UL>編寫第一個 AS3 程式 <P></P> <P style="TEXT-INDENT: 2em">編譯 AS3 需要先安裝 Flex Builder 2(目前唯一支援 AS3 的 IDE),從 Adobe Labs 上下在最新版本的 Flex Builder。然後一路 Next 安裝成功之後,點選快捷方式啟動 Flex Builder。(如圖一)</P> <P style="TEXT-INDENT: 2em"> <CENTER><IMG src="http://cimg2.163.com/catchpic/B/BE/BE607E2FEDE980EBE5A6F0E56A542673.png" TEXT-INDENT: 2em" align=center>圖一 Flex Builder 2 啟動畫面</P> <P style="TEXT-INDENT: 2em">點選工具欄中的 New 按鈕,從彈出的菜單中選擇 ActionScript Project。(如圖二)</P> <P style="TEXT-INDENT: 2em"></P> <P style="TEXT-INDENT: 2em"> <CENTER><IMG src="http://cimg2.163.com/catchpic/D/D9/D98F69868584777C333E08B9DA84887E.png" TEXT-INDENT: 2em" align=center>圖二 建立新的 ActionScript Project</P> <P style="TEXT-INDENT: 2em">在彈出的對話框中輸入 helloworld 作為項目名稱。然後按 Finish 确定。(如圖三)</P> <P style="TEXT-INDENT: 2em"></P> <P style="TEXT-INDENT: 2em"> <CENTER><IMG src="http://cimg2.163.com/catchpic/8/85/8501AF73C82ADB849472403A6AD3355A.png" TEXT-INDENT: 2em" align=center>圖三 輸入項目詳細資訊</P> <P style="TEXT-INDENT: 2em">在新打開的 helloworld.as 檔案中輸入下列代碼:(如圖四)</P> <P style="TEXT-INDENT: 2em"> <CENTER><IMG src="http://cimg2.163.com/catchpic/9/9F/9F4E8947D9240CFFD6415F74FFF41047.png" TEXT-INDENT: 2em" align=center>圖四 helloworld.as 代碼内容</P> <P style="TEXT-INDENT: 2em">按 Ctrl+S 儲存檔案,然後從工具欄中點選 run 按鈕運作程式。(如圖五)</P> <P style="TEXT-INDENT: 2em"> <CENTER><IMG src="http://cimg2.163.com/catchpic/F/F7/F78433024A23DEB53F1F9AD35223D4D9.png" TEXT-INDENT: 2em" align=center>圖五 運作程式</P> <P style="TEXT-INDENT: 2em">最終在浏覽器中的運作效果如圖六:</P> <P style="TEXT-INDENT: 2em"> <CENTER><IMG src="http://cimg2.163.com/catchpic/0/06/0698BA0EFAE66F1C67778DC1908062A1.png" TEXT-INDENT: 2em" align=center>圖六 helloworld 程式運作結果</P>