ActionScript
![]() | |
编程范型 | 多重编程范式: prototype-oriented programming, 函數程式語言, 指令式編程, 腳本語言 |
---|---|
設計者 | Gary Grossman |
實作者 | Macromedia (現在 Adobe Systems) |
发行时间 | 1998年 |
当前版本 |
|
型態系統 | 強型別, 型別系統 |
操作系统 | Cross-platform |
網站 | www |
主要實作產品 | |
Adobe Flash, Adobe Flex | |
受影响于 | |
JavaScript, Java |
ActionScript是 Macromedia(现已被Adobe收购)为其Flash产品开发的 ,最初是一种简单的脚本语言,现在最新版本3.0,是一种完全的面向对象的编程语言,功能强大,类库丰富,语法类似JavaScript,多用于Flash互动性、娱乐性、实用性开发,网页制作和RIA应用程序开发。
ActionScript 是一种基于ECMAScript的脚本语言,可用于编写Adobe Flash动画和应用程序。 由于ActionScript和JavaScript都是基于ECMAScript语法的,理论上它们互相可以很流畅地从一种语言翻译到另一种。不过JavaScript的文档对象模型(DOM)是以浏览器窗口,文档和表单为主的,ActionScript的文档对象模型(DOM)则以SWF格式动画为主,可包括动画,音频,文字和事件处理。
歷史
ActionScript第一次以它目前的语法出现是Flash 5版本,这也是第一个完全可对Flash编程的版本。这个版本被命名为ActionScript1.0。Flash 6通过增加大量的内置函数和对动画元素更好的编程控制更进一步增强了编程环境的功能。Flash 7(MX 2004)引进了ActionScript2.0,它增加了强类型(strong typing)和面向对象特征,如显式类声明, 继承,接口和严格数据类型。ActionScript1.0和2.0使用相同的编译形式编译成Flash SWF文件(即Shockwave Flash files,或 'Small Web Format').
時間表
- Flash Player 2:第一个支持脚本的版本,包括控制时间轴的gotoAndPlay, gotoAndStop, nextFrame和nextScene等动作。
- Flash Player 3:增强了载入外部SWF文件的基本脚本支持(loadMovie)。
- Flash Player 4:第一个完全实现脚本功能(称为动作)的播放器。这些脚本拥有简练的语法和对循环,条件,变量和其它基本语言结构的支持。
- Flash Player 5:第一个拥有真正意义上的ActionScript的版本。依据ECMAScript并采用基于原型编程,并允许完全的 过程式编程和面向对象编程。
- Flash Player 6:增加了事件处理模型,并且支持switch。
- Flash Player 7: Flash Player 7 提供一些新特性如支持CSS显示文本和增强显示效果。 Macromedia Flash编译器和Flash Player 7同时支持基于ECMAScript 4 Netscape Proposal的类编程语言ActionScript 2.0。不过ActionScript 2.0能交叉编译成ActionScript 1.0的字节码,因此它能运行于Flash Player 6。
- Flash Player 8:增加用于运行时图象数据控制和文件上传的新类库及APIs,ActionScript 2.0功能更为完善。
- Flash Player 8.5(计划于2006春发布release版本,currently in public beta):增加ActionScript 3.0和一个称为AVM2(ActionScript Virtual Machine 2)新的虚拟机,它可以与前版本AVM1共存以便支持旧内容。增强性能是该版本的主要目标。
- Flash Player 9 2007發表,這是adobe收購Macromedia後的第一個版本,並且也是Mac OS X上第一個Universal版本的Flash Player。
- Flash Player 10
語言
語法
在ActionScript 2.0 類、與函式館物件(如影片片段)可與類聯繫在一起。類總寫在外在文件檔案內,並且這些文件必須有.as後綴。類是增設部分──對ActionScrip語言來說,可讓程式員自行開發,雖然有許多內建類譬如MovieClip類──可被用來動態地在螢幕上畫出向量──已經滿足需求了。類檔案可用來使您編程更加容易,並且類檔案如果需要的話可在許多專案間轉移。
Flash ActionScript實現的特點如下,JavaScript程式員也許感興趣:
ActionScript 代碼常常直接寫在Flash開發環境。該環境提供參考、代碼提示和句法強調。原代碼常常與電影一起存在.fla檔案裡。自外部文件檔透過#include語法導入ActionScript代碼也相當常見。在這種情況下,外部檔案也許被Flash整合開發環境內建編譯器,或Motion Twin ActionScript2編譯器(MTASC)編譯。參見外部鏈接。
評論
- 編程人員們說Macromedia ActionScript 2.0編譯器有點慢,常常花好幾分鐘才編譯100個類別,然而開放源碼編譯器MTASC可以利用;它快多了。
- ActionScript非常寬大的語法常常讓編程人員們皺眉,因為它常常讓不乾淨代碼難以閱讀。
- 在Flash裡使用許多向量圖形可能拖慢執行許多應用程序的機器的效能,因為Flash每幀每幀重畫每個向量圖。Flash 8引進了cacheAsBitmap 變數,它暫時把向量圖轉換到點陣圖,這種做法幫助降低了延滯。
- Flash的ActionScript VM傾向在觸發內部的暫停處理前就非常快達到它的運算極限,特別在麥金塔版的Flash播放器上更嚴重。例如,簡單從1算到5000會威脅某些用戶Flash播放器的能力。
- 在Flash 8裡許多人不喜歡引入(import)某些類直到要用到那些類別前最後一刻。不幸的是,ActionScript 3.0相當倚賴引入類別,沒有導入撰寫腳本(scripting)實際上不太可能。
- .swf檔案格式挺容易反編譯,使它非常難以保持原碼的隱密性。
樣本
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);
外部連結
技術文件
- 官方(發行前)ActionScript 3.0語言參考(英)
- Macromedia實驗室- Macromedia發展中技術資源站(英)
- 官方ActionScript編程標準(英) PDF
- CodeAlloy: ActionScript 2.0常見問題 - 第二版變動相關資訊(英)
教程
- Macromedia Flash支援中心:使用ActionScript - 直接來自Macromedia的教程與文章(英)
- ActionScript.com - 給Flash和Flex開發者的新聞、資訊、與教程(英)。
- ActionScript.org - 發展者社群與教程、實用代碼片段、與影片片段相關資源(英)。
- Kirupa.com: ActionScript指南 - 大量教程,涵蓋許多業界技術(英)。
- www.actionscript.be - 荷蘭人開發者資源網頁,有教程、論壇、博客等等(荷)。
- Flash遊戲設計 - 按部就班的PDF介紹Flash遊戲設計的指南(英)。
- ActionScript編程 - 按部就班的PDF介紹ActionScript的指南(英)。
- Flashkit - 教學與可下載範例的優秀資源(英)。
- [ Flash遊戲編程維基] - 有關Flash/ActionScript遊戲編程與發展的維基(英)。
資源
- 纬度网 ActionScript 知识库 - 提供围绕ActionScript语言技术的问答形知识库(中文)
- OSFlash - 提供開放源碼Flash專案與工具的資源站點(英)
- MTASC - OCaml寫的開放源碼式命令行ActionScript 2.0編譯器(英)
- NeoSwiff C#到SWF編譯器(英)
- KineticFusion - 用Java寫的商業版跨平台ActionScript 2.0編譯器(英)
- secureSWF - 免費的ActionScript擾亂器(英)(譯按:Obfucastor指的是代碼編譯後擾亂bytecode防止反編譯的擾亂器)
- SWF Protector - Protect SWF Flash
- SE|PY Actionscript編輯器 - 開放源碼的ActionScript編輯器(英)
- V-Cam - Sham Bahngal寫的虛擬"攝影機"(英)
其他
- Rocom 的专栏 - CSDN博客 - 全免插件免安装的在线互动视频聊天室,提供源代码,很强大的综合范例(中)
- FlashGuru - FlashGuru給Flash 開發者的參考博客(英)
- Newgrounds - 社群站,您可以在此張貼Flash遊戲,同樣這裡有Flash論壇如果你需要技術協助的話(英)
- Gotoandplay:一些Flash範例:Flash應用(英)
- Flashplayer - 一個免費站點讓使用者可以張貼Flash動畫、遊戲、或檢視其他人作品(英)
- UnitZeroOne - 一個給Flash開發相關的博客(英)
- Ioji.it - 一個Flash遊戲設計師擁有的站點;該站有Flash與ActionScript專屬論壇(英)
- CodeDrive - Flash/ActionScript 3 IDE
參見
- ECMAScript
- Lingo for Macromedia Director
- Macromedia Flash
- Scripting
- Macromedia