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 版語言規格中的定義,實作規則運算式的支援。

命名空間

命名空間類似於用來控制宣告可見性的傳統存取指定字 ( public private protected )。但命名空間是自訂存取指定字,可以讓您自行選擇名稱。命名空間會使用通用資源識別項 (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 文字引擎。這一組類別提供文字的低階控制,而且其設計是用於建立文字架構和組件。