本页使用了标题或全文手工转换

ActionScript

维基百科,自由的百科全书
跳转至: 导航搜索
ActionScript
Farm-Fresh page white actionscript.png
编程范型 多重编程范式基于原型的面向对象程序设计函数编程语言命令式编程脚本语言
发行时间 1998年
设计者 Gary Grossman英语Gary Grossman
实现者 Adobe Systems
最新发行时间 3.0 / 2006年6月27日,8年前 (2006-06-27)
型态系统 强类型静态类型
主要实现产品 Adobe FlashApache Flex
启发语言 JavaScriptJava
操作系统 跨平台

ActionScriptAdobe为其Flash产品开发的 ,最初是一种简单的脚本语言,现在最新版本3.0,是一种完全的面向对象的编程语言,功能强大,类库丰富,语法类似JavaScript,多用于Flash互动性、娱乐性、实用性开发,网页制作RIA应用程序开发。

ActionScript是一种基于ECMAScript的脚本语言,可用于编写Adobe Flash动画和应用程序。由于ActionScript和JavaScript都是基于ECMAScript语法的,理论上它们互相可以很流畅地从一种语言翻译到另一种。不过JavaScript的文档对象模型是以浏览器窗口,文档表单为主的,ActionScript的文档对象模型则以SWF格式动画为主,可包括动画,音频,文字和事件处理

历史[编辑]

Mac OS X 10.2操作系统上的Macromedia Flash MX专业版里,这些代码可以创建一个与MAC OS X启动过程中看见的类似的动画。

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 支持多线程
  • Flash Player 11 2011年发表,运用Stage3D API提供的硬件加速图像渲染,支持GPU加速。[1]
  • Flash Player 12 [2]
  • Flash Player 13 [3]
  • Flash Player 14 2014年发表,支持AGAL2[4]
  • Flash Player 16 2014年11月发表,支持new PPAPI[5]

[1]

桌面+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 与视频 并优化效率

语言[编辑]

语法[编辑]

在ActionScript 2.0里,函数馆对象(如视频片段丶按钮)可与类联系在一起。类可写在外在文档文件内,并且这些文件必须有.as后缀。类是增设部分──对ActionScrip语言来说,可让程序员自行开发,虽然有许多内置类譬如MovieClip类──可被用来动态地在屏幕上画出矢量──已经满足需求了。类文件可使编程更加容易,并且类文件如果需要的话可在许多项目间转移。

Flash ActionScript实现的特点如下,JavaScript程序员也许感兴趣:

  • 一切设计是异步的;callback是普遍存在的,但事件对象不存在。
  • 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);

外部链接[编辑]

技术文件[编辑]

教程[编辑]

资源[编辑]

  • 纬度网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写的虚拟"摄影机"(英)

其他[编辑]

  • FlashGuru - FlashGuru给Flash开发者的参考博客(英)
  • Newgrounds - 社区站,您可以在此张贴Flash游戏,同样这里有Flash论坛如果你需要技术协助的话(英)
  • Gotoandplay:一些Flash示例:Flash应用(英)
  • Flashplayer - 一个免费站点让用户可以张贴Flash动画、游戏、或查看其他人作品(英)
  • UnitZeroOne - 一个给Flash开发相关的博客(英)
  • Ioji.it - 一个Flash游戏设计师拥有的站点;该站有Flash与ActionScript专属论坛(英)
  • CodeDrive - Flash/ActionScript 3 IDE

参见[编辑]