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文件。 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的平台有自己的加密方式更加的解決所有語言都有的這難題。 [來源請求] 下面列印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; 下面先進的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); 導入 SWC 或相關 SDK 以後，在建構子內加入以下這段，便可啟用 GPU 高速框架開發相關 swf 或是跨平台軟體。 var _starling = new Starling(MainGame, stage); _starling.start(); ECMAScript Lingo for Macromedia Director Macromedia Flash Scripting Macromedia Standard ECMA-262. Ecma-international.org. [April 22, 2013]. （原始内容存档于2015-12-30）.  ECMAScript. ECMAScript. [April 22, 2013]. （原始内容存档于2016年5月18日）.  Flash Player 11 Release Notes. [2014-08-27]. （原始内容存档于2014-09-23）.  Flash Player 14 Release Notes. [2014-08-27]. （原始内容存档于2014-10-03）.  Introducing Starling | Adobe Developer Connection. www.adobe.com. [2019-08-31]. （原始内容存档于2019-08-31）.  Starling Features - The Cross Platform Game Engine. Gamua. [2019-08-31]. （原始内容存档于2019-08-31） （英语）.  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）.  維基教科書中的相關電子教程：ActionScript编程 官方 API（页面存档备份，存于互联网档案馆） Macromedia實驗室（页面存档备份，存于互联网档案馆）- Macromedia發展中技術資源站（英）