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文件。

 播放器發展時間表 
+版本發布日期描述Flash Player 21997/06/17第一个支持脚本的版本，包括控制时间轴的gotoAndPlay、 gotoAndStop、nextFrame和nextScene等方法。Flash Player 31998/05/31增强了载入外部SWF文件的基本脚本支持（loadMovie）。Flash Player 41999/06/15第一个完全实现脚本功能（称为「动作」）的播放器。这些脚本拥有简练的语法和对循环、条件、变量和其它基本语言结构的支持。Flash Player 52000/08/24第一个拥有真正意义上的ActionScript的版本。依据ECMAScript，采用基于原型编程，并允许完全的过程式编程和面向对象编程。Flash Player 62002/03/15增加了事件处理模型，并且支持switch。Flash Player 72003/09/10提供一些新特性，如支持CSS显示文本和增强显示效果。Macromedia Flash编译器和Flash Player 7同时支持基于ECMAScript 4 Netscape Proposal的类编程语言ActionScript 2.0。不过ActionScript 2.0能交叉编译成ActionScript 1.0的字节码，因此它能运行于Flash Player 6。Flash Player 82005/09/13增加用于运行时图象数据控制和文件上传的新类库及APIs，ActionScript 2.0功能更为完善。Flash Player 92006/06/22原稱為Flash Player 8.5，增加ActionScript 3.0和一个称为AVM2（ActionScript Virtual Machine 2）新的虚拟机，它可以与前版本AVM1共存以便支持旧内容。增强性能是该版本的主要目标。這是adobe收購Macromedia後的第一個版本，並且也是Mac OS X上第一個Universal版本的Flash Player。Flash Player 102008/10/15支援多線程。Flash Player 112011/10/04運用Stage3D API提供的硬體加速圖像渲染，支援GPU加速。Flash Player 142014/06/10支援AGAL2Flash Player 17.0.0.93（閱覽版 (Beta)）2015/03/12 支持64位元PC全平台
 Flash Player 17.0.0.171（正式版）Flash Player 18（閱覽版 (Beta)）2015/06/09 支持PC瀏覽器優化
 支持3D支援持續擴充Flash Player 192015/09/21Flash Player 202015/12/08增強視訊處理和資訊防盜功能Flash Player 21 2016/03/10 針對FLASH 與 HTML5結合運用 完善相關API
 與火狐團隊合作 並針對火狐特殊需求增加支援
 GPU渲染 3D 記憶體處理
 強化MAC平台支援Flash Player 222016/06/16 處理字典訊息問題
 XML 修正
 PPAPI 印刷修正
 针对Chrome浏览器修正橫向模式
 大空字符修正
 新增 EnableLocalAppData 作為安全性功能提供
 與 Google 合作修正視訊路線處理
 桌面+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）編譯。

 评价 

 示例 
 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 (this[rand]) == "number") ? this[rand] : this.pickNumber();
};
Array.prototype.pickString = function():String  {
   var rand:Number = random(this.length);
   return (typeof (this[rand]) == "string") ? this[rand] : 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;

 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);

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

var _starling = new Starling(MainGame, stage);
_starling.start();

 參見 
 ECMAScript
 Lingo for Macromedia Director
 Macromedia Flash
 Scripting
 Macromedia

 参考资料 

 外部連結 

 官方 API
 Macromedia實驗室- Macromedia發展中技術資源站（英）

Category:程序设计语言
Category:脚本语言
Category:基于类的编程语言
Category:1998年建立的程式語言