ActionScript

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

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 檔案。

1.1 播放器發展時間表

1.2 桌面 + 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 版本。強化視訊和攝影機路線規劃、高畫質處理、效能最佳化和移動平臺相關開發。

語言

2.1 語法

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

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

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

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

2.2 評價

示例

3.1 ActionScript 2.0 樣本

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

trace ("Hello world!");

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

onMouseMove = function {trace ("X:"+root.xmouse);

trace ("Y:"+root.ymouse);

};

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

var my_Array:Array = new Array ("Hello", "ActionScript", 3, 7, 11, "Flash");

Array.prototype.pickNumber = function :Number {var rand:Number = random (this.length);

return (typeof (thisrand) == "number") ? thisrand : this.pickNumber ;};

Array.prototype.pickString = function :String {var rand:Number = random (this.length);

return (typeof (thisrand) == "string") ? thisrand : this.pickString ;};

var num:Number = my_Array.pickNumber ;

var str:String = my_Array.pickString ;

_root.createTextField ("txt", 1, 10, 10, 530, 390);

txt.text = "Array ="+my_Array+"\nRandom Number ="+num+"\nRandom String ="+str;

3.2 ActionScript 3.0 樣本

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

package {

import flash.text.TextField;

import flash.display.MovieClip;

import flash.filters.DropShadowFilter;

public class HelloWorld extends MovieClip {public function HelloWorld {var shad:DropShadowFilter = new DropShadowFilter (2, 45, 0x000000, 25, 3, 3, 2, 2);

var txt:TextField = new TextField ;

txt.textColor = 0xFFFFFF;

txt.filters = shad;

txt.width = 120;

txt.x = Math.random *300;

txt.y = Math.random *300;

txt.selectable = false;

txt.text = "Hello World!"+Math.round (txt.x)+","+Math.round (txt.y)+"";

addChild (txt);

}

}

}

//-----ActionScript3.0-----------------

//as3.0 最重要的概念就是在效能方面的增進，平時所加入的任何事件都可以被監聽或從記憶體中移除

// 以下例子就是監聽與移除記憶體佔用，這是 as3.0 最重要的基礎概念

bt1.addEventListener (MouseEvent.CLICK,bt1_click);

function bt1_click (e:MouseEvent):void {// 觸發的事件內容；}

// 該按紐監聽不需要時則 remove 掉，增加效能

bt1.removeEventListener (MouseEvent.CLICK,bt1_click);

3.3 Starling GPU 開發樣本

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

var _starling = new Starling (MainGame, stage);

_starling.start ;