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 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
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函式只有支援整合環境。
下面代碼利用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 = 0 xFFFFFF ;
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 ();
參見
参考资料
外部連結
網頁技術與標準
文档呈现语言 样式格式描述语言 动态网页技术 用戶端互動技术 用戶端手稿語言 标识定位语言 文档纲要语言