ActionScript

面向对象的编程语言

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

ActionScript
編程範型多重編程範式基於原型的物件導向程式設計函數程式語言指令式編程手稿語言
設計者Gary Grossman英語Gary Grossman
實作者Adobe Systems
釋出時間1998年
目前版本
  • 3.0(2006年6月27日)
編輯維基數據連結
型態系統強型別靜態型別
作業系統跨平台
網站www.adobe.com/devnet/actionscript.html 編輯維基數據連結
主要實作產品
Adobe FlashAdobe AnimateApache Flex
啟發語言
JavaScriptJava

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 2 1997/06/17 第一個支援指令碼的版本,包括控制時間軸的gotoAndPlay、 gotoAndStop、nextFrame和nextScene等方法。
Flash Player 3 1998/05/31 增強了載入外部SWF檔案的基本指令碼支援(loadMovie)。
Flash Player 4 1999/06/15 第一個完全實現指令碼功能(稱為「動作」)的播放器。這些指令碼擁有簡練的語法和對迴圈、條件、變數和其它基本語言結構的支援。
Flash Player 5 2000/08/24 第一個擁有真正意義上的ActionScript的版本。依據ECMAScript,[1]採用基於原型編程,並允許完全的程序式編程物件導向程式設計
Flash Player 6 2002/03/15 增加了事件處理模型,並且支援switch。
Flash Player 7 2003/09/10 提供一些新特性,如支援CSS顯示文字和增強顯示效果。Macromedia Flash編譯器和Flash Player 7同時支援基於ECMAScript 4 Netscape Proposal[2]程式語言ActionScript 2.0。不過ActionScript 2.0能交叉編譯成ActionScript 1.0的位元組碼,因此它能執行於Flash Player 6。
Flash Player 8 2005/09/13 增加用於執行時圖象數據控制和檔案上載的新類別館及APIs,ActionScript 2.0功能更為完善。
Flash Player 9 2006/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 10 2008/10/15 支援多線程。
Flash Player 11 2011/10/04 運用Stage3D API提供的硬件加速圖像彩現,支援GPU加速。[3]
Flash Player 14 2014/06/10 支援AGAL2[4]
Flash 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 19 2015/09/21
Flash Player 20 2015/12/08 增強視像處理和資訊防盜功能
Flash Player 21 2016/03/10
  • 針對FLASH 與 HTML5結合運用 完善相關API
  • 與火狐團隊合作 並針對火狐特殊需求增加支援
  • GPU彩現 3D 記憶體處理
  • 強化MAC平台支援
Flash Player 22 2016/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)編譯。

評價

  • 編程人員們說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函數只有支援整合環境。

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 或是跨平台軟件。[5][6][7]

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

參見

參考資料

  1. ^ Standard ECMA-262. Ecma-international.org. [April 22, 2013]. (原始內容存檔於2015-12-30). 
  2. ^ ECMAScript. ECMAScript. [April 22, 2013]. (原始內容存檔於2016年5月18日). 
  3. ^ Flash Player 11 Release Notes. [2014-08-27]. (原始內容存檔於2014-09-23). 
  4. ^ Flash Player 14 Release Notes. [2014-08-27]. (原始內容存檔於2014-10-03). 
  5. ^ Introducing Starling | Adobe Developer Connection. www.adobe.com. [2019-08-31]. (原始內容存檔於2019-08-31). 
  6. ^ Starling Features - The Cross Platform Game Engine. Gamua. [2019-08-31]. (原始內容存檔於2019-08-31) (英語). 
  7. ^ Bose, Juwal. Starling game development essentials : develop and deploy isometric turn-based games using Starling. Birmingham, UK: Packt Pub. 2013 [2019-08-31]. ISBN 178398354X. OCLC 870467587. (原始內容存檔於2019-09-19). 

外部連結