ActionScript 3.0 簡介

關於 ActionScript

ActionScript 是 Adobe® Flash® Player 和 Adobe® AIR™ 執行階段環境所使用的程式語言。這套語言可為 Flash、Flex 與 AIR 內容和應用程式提供互動性、資料處理和更多功能。

ActionScript 會在 ActionScript Virtual Machine (AVM,是 Flash Player 和 AIR 的一部分) 中執行。編譯器通常會將 ActionScript 程式碼轉換成位元組碼格式 (位元組碼是一種由電腦撰寫而且電腦可以理解的程式設計語言)。編譯器範例包括一種 Adobe® Flash® Professional 內建的編譯器以及一種 Adobe® Flash® Builder™ 內建並在 Adobe® Flex™ SDK 中可以用到的編譯器。位元組碼內嵌於 Flash Player 和 AIR 都會執行的 SWF 檔案中。

ActionScript 3.0 提供強大的程式設計模型,對於物件導向程式設計有基本認識的開發人員將能很快熟悉。ActionScript 3.0 中針對舊版 ActionScript 改善的部分重要功能包括:

  • 名為 AVM2 的新 ActionScript Virtual Machine,它使用了全新的位元組碼指令集,可大幅提高效能

  • 更新穎的編譯器程式碼基底,相較於舊版編譯器,可以執行更深入的最佳化作業

  • 經過擴充和改良的應用程式設計介面 (API),對物件具備較低的控制度,是真正的物件導向模型

  • 以 ECMAScript for XML (E4X) 規格 (ECMA-357 第 2 版) 為基礎的 XML API。E4X 是 ECMAScript 的語言擴充功能,將 XML 新增為該語言的原生資料類型。

  • 以「文件物件模型 (DOM) 第 3 層事件規格」為基礎的事件模型

ActionScript 3.0 的優點

ActionScript 3.0 的 Script 編寫功能比舊版 ActionScript 更強大。這套語言能建立高度複雜的應用程式,其中包含大型資料集和物件導向、重複使用的程式碼基底。在 Adobe Flash Player 中執行的內容並不需要 ActionScript 3.0。不過,它只有透過 AVM2 (ActionScript 3.0 虛擬機器),才能改善效能。與舊版 ActionScript 程式碼相較,ActionScript 3.0 程式碼的執行速度能快上十倍。

舊版 ActionScript Virtual Machine (AVM1) 可執行 ActionScript 1.0 和 ActionScript 2.0 程式碼。Flash Player 9 和 10 支援 AVM1 的回溯相容。

ActionScript 3.0 的新增功能

ActionScript 3.0 包含許多與 ActionScript 1.0 和 2.0 相似的類別和功能。不過,ActionScript 3.0 在架構和概念上與舊版 ActionScript 不同。ActionScript 3.0 中的增強項目包括核心語言的新功能,以及經過改良的 API,可加強控制低階物件。

核心語言功能

核心語言會定義程式語言的基本建構區塊,例如陳述式、運算式、條件、迴圈和類型。ActionScript 3.0 包含許多可加速開發程序的功能。

執行階段例外

與舊版 ActionScript 相較,ActionScript 3.0 會通報更多的錯誤狀況。執行階段例外適用於常見的錯誤狀況,可加強除錯效果,讓您開發有效處理錯誤的應用程式。執行階段錯誤可提供堆疊追蹤,其中會加註來源檔案和行號資訊,協助您快速找出錯誤所在位置。

執行階段類型

在 ActionScript 3.0 中,類型資訊會在執行階段中予以保留。此資訊是用於執行執行階段類型檢查,藉以改善系統的檔案安全。類型資訊也可用來以原生機器的表示方式代表變數,這樣可以提高效能並減少記憶體用量。透過比較的方式,在 ActionScript 2.0 中,類型註釋主要是一種開發人員輔助,而且所有的值都會在執行階段中動態輸入。

密封類別

ActionScript 3.0 包括密封類別的概念。密封類別只擁有一組在編譯階段定義的固定屬性和方法,不能加入其它屬性和方法。在執行階段不可以變更類別,這樣能夠進行更嚴格的編譯階段檢查,產生更強大的程式。此外,由於每個物件實體不需要內部雜湊表,因此這也會減少記憶體的用量。只要使用 dynamic 關鍵字,就可以宣告動態類別。ActionScript 3.0 中的所有類別預設都是密封的,但是您可以使用 dynamic 關鍵字將類別宣告為動態類別。

方法結束項

ActionScript 3.0 可讓方法終止自動記憶其原始物件實體。這項功能對事件處理很有用。在 ActionScript 2.0 中,方法終止不會記憶當初是從哪一個來源物件實體擷取,因此當叫用方法終止時,會導致無法預期的行為。

ECMAScript for XML (E4X)

ActionScript 3.0 實作了最近才標準化為 ECMA-357 的 ECMAScript for XML (E4X)。E4X 可提供一組自然、順暢的語言建構,可用來操作 XML。與傳統 XML 剖析 API 不同的是,使用 E4X 的 XML 就像是語言的原生資料類型。E4X 可大幅減少所需的程式碼,簡化使用 XML 開發應用程式的工作。

若要檢視 ECMA E4X 規格,請前往 www.ecma-international.org

規則運算式

ActionScript 3.0 包含規則運算式的原生支援,讓您可以快速搜尋和操作字串。ActionScript 3.0 會依照 ECMAScript (ECMA-262) 第 3 版語言規格中的定義,實作規則運算式的支援。

命名空間

命名空間類似於用來控制宣告可見性的傳統存取指定字 (publicprivateprotected)。命名空間的運作方式如同自訂存取指定字,您可以自行選擇名稱。命名空間會使用通用資源識別項 (URI) 來避免發生衝突,而當您使用 E4X 時,命名空間會用來代表 XML 命名空間。

新的基本類型

ActionScript 3.0 包含 3 種數字類型:Number、int 以及 uint。數字代表一個雙倍精確、浮點數字。int 類型是 32 位元具有正負號的整數,可讓 ActionScript 程式碼利用 CPU 的快速整數算術能力。int 類型適用於使用整數的迴圈計數器和變數。uint 類型是無正負號的 32 位元整數,適用於 RGB 顏色值、位元組計數等用途。相反的,ActionScript 2.0 只有一種數字類型 - Number。

API 功能

ActionScript 3.0 中的 API 包含許多類別,可讓您控制低階物件。與舊版相比,這套語言的架構在設計上更為直覺。由於新類別太多,無法逐一詳細說明,不過某些巨大的差異值得一提。

DOM3 事件模型

Document Object Model Level 3 事件模型 (DOM3) 提供一種產生以及處理事件訊息的方法。這種事件模型的設計是為了允許物件應用程式中的物件,可以互動以及通訊、維護其狀態以及對任何變更做出回應。ActionScript 3.0 事件模型是以「全球資訊網協會 DOM 第 3 層事件規格」為基礎,提供的機制比舊版 ActionScript 的事件系統更為清楚,也更有效率。這種模型提供的機制遠比舊版 ActionScript 提供的事件系統還要明確且更有效率。

事件和錯誤事件都可在 flash.events 套件中找到。Flash Professional 組件使用的事件模型與 Flex 架構相同,因此事件系統在 Flash Platform 上是統一的。

顯示清單 API

這是存取顯示清單 (即包含應用程式中任何視覺元素的樹狀結構) 的 API,是由處理 Flash 視覺基本元素的類別所組成。

Sprite 類別是一種輕量型建構區塊,其設計是做為使用者介面組件之類視覺元素的基底類別。Shape 類別則代表原始向量形狀。這些類別都可以使用 new 運算子加以自然實體化,而且可以隨時動態改變父系。

自動深度管理。您可以使用方法來指定和管理物件的疊置順序。

處理動態資料和內容

ActionScript 3.0 包含多項可用來載入和處理應用程式中資源和資料的機制,這些機制不但直覺,而且在 API 中一致。Loader 類別提供載入 SWF 檔和影像資源的單一機制,並能夠存取所載入內容的詳細資訊。URLLoader 類別可提供另一種機制,將文字和二進位資料載入資料驅動應用程式。Socket 類別可用任何形式讀取和寫入二進位資料至伺服器通訊端。

低階資料存取

各種 API 提供低階資料存取。針對下載的資料,URLStream 類別可在資料下載的同時,以原始二進位資料的形式存取資料。ByteArray 類別可讓您最佳化讀取、寫入和使用二進位資料。聲音 API 透過 SoundChannel 和 SoundMixer 類別,可讓您精細控制聲音。安全性 API 可以提供 SWF 檔或所載入內容的安全性權限資訊,讓您處理安全性錯誤。

使用文字

ActionScript 3.0 為所有與文字相關的 API 提供 flash.text 套件。TextLineMetrics 類別可為文字欄位中的文字行提供詳細的公制字。它取代了 ActionScript 2.0 中的 TextFormat.getTextExtent() 方法。TextField 類別包含低階方法,可以為文字欄位中的文字行或單一字元提供特定資訊。例如,getCharBoundaries() 方法會傳回代表字元範圍框的矩形。getCharIndexAtPoint() 方法會傳回特定地方的字元索引。getFirstCharInParagraph() 方法會傳回段落中第一個字元的索引。行階層方法則包含 getLineLength() (傳回指定文字行中的字元數) 以及 getLineText() (傳回指定行的文字)。Font 類別可管理 SWF 檔中的內嵌字體。

為了對文字進行平均低階控制,flash.text.engine 套件中的類別會組成 Flash 文字引擎。這一組類別提供文字的低階控制,而且其設計是用於建立文字架構和組件。