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文件。
在ActionScript 2.0裡,函式館物件(如影片片段、按鈕)可與類聯繫在一起。類可寫在外在文件檔案內,並且這些文件必須有.as後綴。類是增設部分──對ActionScript語言來說,可讓程式員自行開發,雖然有許多內建類譬如MovieClip類──可被用來動態地在螢幕上畫出向量──已經滿足需求了。類檔案可使編程更加容易,並且類檔案如果需要的話可在許多專案間轉移。
Flash ActionScript實現的特點如下,JavaScript程式員也許感興趣:
ActionScript代碼常常直接寫在Flash開發環境。該環境提供參考、代碼提示和句法強調。原代碼常常與電影一起存在.fla檔案裡。自外部文件檔透過#include語法導入ActionScript代碼也相當常見。在這種情況下,外部檔案也許被Flash整合開發環境內建編譯器,或Motion Twin ActionScript2編譯器(MTASC)編譯。
[來源請求]
下面列印Hello World。值得注意的是這只能在整合環境下執行,因為trace函式只有支援整合環境。
trace("Hello world!");
下面代碼利用onMouseMove事件當滑鼠移動時輸出現行滑鼠位置。同樣的這只有在整合環境下執行。
onMouseMove = function () { trace("X: "+_root._xmouse); trace("Y: "+_root._ymouse); };
這個較先進的範例創造一個包括數字與字串的陣列,並利用原形函式(prototype function)與函式遞歸給變數名num指定一個數,給變數str指定一個字串。然後,利用MovieClip應用程序介面,文字區域被顯示在屏幕上,文字區域裡頭寫入了變數值。
num
str
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 或是跨平台軟體。[5][6][7]
var _starling = new Starling(MainGame, stage); _starling.start();