Actionscript

**ActionScript** 是原 Macromedia 公司（後併入 Adobe）為其 Flash 產品開發的一種基於 ECMAScript 的物件導向程式語言。ActionScript 可用於網頁製作、Adobe Flash 動畫和 RIA 應用程式的開發。

ActionScript 和 JavaScript 均基於 ECMAScript 語法，因而擁有類似的語法。理論上它們互相可以很流暢地從一種語言翻譯到另一種。不過 JavaScript 的文件物件模型是以瀏覽器窗口、文件和表單為主的，ActionScript 的文件物件模型則以 SWF 格式動畫為主，可包括動畫、音訊、文字和事件處理。

ActionScript 開發時可藉由匯入 ANE 作為跨平台使用；並且官方公布之認證 Starling （基於 OPGL 協定）開放框架，可使用 GPU 高速繪圖，而非傳統的 CPU 運算功能。

## 歷史

ActionScript 首次出現於 Flash 5 並實現了在 Flash 內編程。這個版本被命名為 ActionScript 1.0。Flash 6 通過增加大量的內建函式和對動畫元素更好的編程控制更進一步增強了編程環境的功能。Flash 7（MX 2004）引進了 ActionScript 2.0，它增加了強型別和物件導向特徵，如顯式類聲明、繼承、介面和嚴格資料類型。ActionScript 1.0 和 2.0 使用相同的編譯形式編譯成 Flash SWF 檔案。

### 播放器發展時間表

### 桌面 + APP 時間表

* 2007 年 3 月 19 日：發佈 AIR public preview（當時稱 Apollo）及軟體開發工具包（SDK）。
* 2007 年 6 月 10 日：Apollo 更名為 AIR 及發佈 AIR Public beta。
* 2007 年 10 月 1 日：發佈 AIR Public beta 2。
* 2007 年 12 月 12 日：發佈 AIR Public beta 3。
* 2008 年 2 月 25 日：發佈 AIR 1.0 版本。
* 2008 年 6 月 17 日：發佈 AIR 1.1 版本。
* 2008 年 11 月 17 日：發佈 AIR 1.5 版本。
* 2009 年 2 月 24 日：發佈 AIR 1.5.1 版本。
* 2009 年 7 月 30 日：發佈 AIR 1.5.2 版本。
* 2009 年 12 月 8 日：發佈 AIR 1.5.3 版本。
* 2010 年 6 月 10 日：發佈 AIR 2.0 版本。
* 2010 年 10 月 24 日：發佈 AIR 2.5 版本。
* 2011 年 2 月 24 日：發佈 AIR 2.6 版本。
* 2011 年 6 月 14 日：發佈 AIR 2.7 版本。
* 2011 年 10 月 3 日：發佈 AIR 3.0 版本。
* 2011 年 11 月 11 日：發佈 AIR 3.1 版本。
* 2012 年 3 月 28 日：發佈 AIR 3.2 版本。
* 2012 年 6 月 5 日：發佈 AIR 3.3 版本。
* 2012 年 8 月 21 日：發佈 AIR 3.4 版本。
* 2012 年 11 月 6 日：發佈 AIR 3.5 版本。
* 2013 年 2 月 12 日：發佈 AIR 3.6 版本。
* 2013 年 4 月 9 日：發佈 AIR 3.7 版本。
* 2013 年 7 月 24 日：發佈 AIR 3.8 版本。
* 2013 年 10 月 8 日：發佈 AIR 3.9 版本。
* 2013 年 10 月 30 日：發佈 AIR 4.0 版本。
* 2014 年 4 月 8 日：發佈 AIR 13.0 版本。
* 2014 年 6 月 10 日：發佈 AIR 14.0 版本。
* 2014 年 9 月 9 日：發佈 AIR 15.0 版本。
* 2014 年 11 月 11 日：發布 AIR 16.0 版本（Beta），全面支援 win8 64 位元 /android 5.0 /ios 8。
* 2015 年 1 月 22 日：發布 AIR 16.0 版本（正式版），全面支援 win8 64 位元 /android 5.0 /ios 8。
* 2015 年 2 月 4 日：發布 AIR 17.0 版本（Beta），強化支援 3D 特效與其他視訊效果，並優化效率。
* 2015 年 4 月 14 日：發布 AIR 17.0.0.171 版本（正式版）。
* 2015 年 4 月 22 日：發布 AIR 18.0 版本（Beta），3D 功能擴充，優化 IOS 效率 20%。
* 2015 年 5 月 13 日：開源團隊開啟支援 linux ubuntu 計畫。
* 2015 年 7 月 8 日：發佈 AIR 18.0 版本。
* 2015 年 9 月 21 日：發佈 AIR 19.0 版本，增加安全性和增加 IOS 支援。
* 2015 年 11 月 18 日：發佈 AIR 20.0（Beta）版本。增加 android TV 等跨平台 TV 支援技術研發。
* 2016 年 6 月 16 日：發佈 AIR 21.0 版本。強化視訊和攝影機路線規劃、高畫質處理、效能優化和移動平台相關開發。

## 語言

### 語法

在 ActionScript 2.0 裡，函式館物件（如影片片段、按鈕）可與類聯繫在一起。類可寫在外在文件檔案內，並且這些檔案必須有**.as** 後綴。類是增設部分──對 ActionScript 語言來說，可讓程式員自行開發，雖然有許多內建類譬如 **MovieClip** 類──可被用來動態地在螢幕上畫出向量──已經滿足需求了。類檔案可使編程更加容易，並且類檔案如果需要的話可在許多專案間轉移。

Flash ActionScript 實現的特點如下，JavaScript 程式員也許感興趣：

* 一切設計是非同步的；回呼函式是普遍存在的，但事件物件不存在。
* XML 的實現從 Flash 5 便存在了。Flash 可送和收 XML，該項功能可用來透過網路伺服器創造網上多玩者遊戲。

ActionScript 代碼常常直接寫在 Flash 開發環境。該環境提供參考、代碼提示和句法強調。原代碼常常與電影一起存在.fla 檔案裡。自外部檔案檔透過 #include 語法匯入 ActionScript 代碼也相當常見。在這種情況下，外部檔案也許被 Flash 整合開發環境內建編譯器，或 Motion Twin ActionScript2 編譯器（MTASC）編譯。

### 評價

* 編程人員們說 Macromedia ActionScript 2.0 編譯器有點慢，常常花好幾分鐘才編譯 100 個類別，然而開放原始碼編譯器 MTASC 可以利用；它快多了。
* ActionScript2.0 非常寬大的語法常常讓編程人員們皺眉，因為它常常讓不乾淨代碼難以閱讀。**ActionScript 3.0 的型別綁定改善了此缺點**
* 在 Flash 裡使用許多向量圖形可能拖慢執行許多應用程式的機器的效能，因為 Flash 每影格每影格重畫每個向量圖。Flash 8 引進了 cacheAsBitmap 變數，它暫時把向量圖轉換到點陣圖，這種做法幫助降低了延滯。
* Flash 的 ActionScript VM 傾向在觸發內部的暫停處理前就非常快達到它的運算極限，特別在麥金塔版的 Flash 播放器上更嚴重。例如，簡單從 1 算到 5000 會威脅某些使用者 Flash 播放器的能力。
* 在 Flash 8 裡許多人不喜歡引入（import）某些類直到要用到那些類別前最後一刻。不幸的是，**ActionScript 3.0** 相當倚賴引入類別，沒有匯入撰寫指令碼（scripting）實際上不太可能。
* .swf 檔案格式容易被反編譯，使它非常難以保持原碼的隱密性。在日後的發展由於發布後為原生語言結構此問題已不復存在，加上 app 的平台有自己的加密方式更加的解決所有語言都有的這難題。

## 範例

### ActionScript 2.0 樣本

下面列印 Hello World。值得注意的是這只能在整合環境下執行，因為 trace 函式只有支援整合環境。

下面代碼利用 onMouseMove 事件當滑鼠移動時輸出現行滑鼠位置。同樣的這只有在整合環境下執行。

這個較先進的範例創造一個包括數字與字串的陣列，並利用原形函式（prototype function）與函式遞迴給變數名 `num` 指定一個數，給變數 `str` 指定一個字串。然後，利用 MovieClip 應用程式介面，文字區域被顯示在螢幕上，文字區域裡頭寫入了變數值。

### ActionScript 3.0 樣本

下面先進的 Hello World 程式目前需要在 Flex 2.0 公開 Alpha 測試版整合環境中編譯。

### Starling GPU 開發樣本

匯入 SWC 或相關 SDK 以後，在建構子內加入以下這段，便可啟用 GPU 高速框架開發相關 swf 或是跨平台軟體。

## 參見

* ECMAScript
* Lingo for Macromedia Director
* Macromedia Flash
* Scripting
* Macromedia

## 參考資料

## 外部連結

* 官方 API（頁面存檔備份，存於網際網路檔案館）
* Macromedia 實驗室（頁面存檔備份，存於網際網路檔案館）- Macromedia 發展中技術資源站（英）