ActionScript 3.0 是一种强大的
面向对象编程语言,它标志着 Flash Player Runtime 演化过程中的一个重要阶段。设计 ActionScript 3.0 的意图是创建一种适合快速地构建效果丰富的互联网应用程序的语言,这种应用程序已经成为 Web 体验的重要部分。
内容简介
ActionScript 是一种基于 ECMAScript 的
编程语言,用来编写 Adobe Flash 电影和应用程序。ActionScript 1.0 最初随 Flash 5 一起发布,这是第一个完全可编程的版本。Flash 6 增加了几个
内置函数,允许通过程序更好地控制动画元素。在 Flash 7 中引入了 ActionScript 2.0,这是一种强类型的语言,支持基于类的编程特性,比如继承、接口和严格的数据类型。Flash 8 进一步扩展了 ActionScript 2,添加了新的类库以及用于在运行时控制位图数据和文件上传的 API。Flash Player 中内置的 ActionScript Virtual Machine(AVM1)执行 ActionScript。通过使用新的
虚拟机ActionScript Virtual Machine(AVM2),Flash 9(附带 ActionScript 3)大大提高了性能。
简介
ActionScript 的老版本(ActionScript 1.0 和 2.0)提供了创建效果丰富的 Web应用程序所需的功能和灵活性。ActionScript 3 现在为基于 Web 的应用程序提供了更多的可能性。它进一步增强了这种语言,提供了出色的性能,简化了开发的过程,因此更适合高度复杂的 Web应用程序和大数据集。ActionScript 3 可以为以 Flash Player 为目标的内容和应用程序提供高性能和开发效率。
ActionScript 3 符合 ECMAScript Language Specification 第三版。它还包含基于 ECMAScript Edition 4 的功能,比如类、包和
名称空间;可选的静态类型;生成器和
迭代器;以及非结构化赋值(destructuring assignments)。随着 Web应用程序项目需求的增长,也要求 ActionScript 引擎有重大的突破。ActionScript 3 引入了一个新的高度优化的 ActionScript Virtual Machine(AVM2),与 AVM1 相比,AVM2 的性能有了显著的提高。这使 ActionScript 3 代码的执行速度几乎比以前的 ActionScript 代码快了 10 倍。Flash Player 9 中包含 AVM2(ActionScript 3.0 的
脚本语言引擎),设计它的目的是提供互联网
应用程序开发人员所需的性能和特性。为了
向后兼容现有的内容,Flash Player 将继续支持 AVM1。
相关产品
有许多产品都生成以 Flash Player Runtime 为目标的内容和应用程序,包括 YouTube、Flickr、SWiSH 和 ScreenTime。这些产品能够利用 ActionScript 在自己的输出中添加交互和行为。在 Adobe 产品系列中,专业设计人员可以在几种工具和服务器中使用 ActionScript,比如Air、 Flash、Flex 和 Flash Media Server,从而为 Flash Player Runtime 创建内容和应用程序。Flex 产品系列(包括基于 Eclipse 的新的 Flex Builder 2 IDE)是第一个能够使用 ActionScript 3.0 的新功能的产品系列。Adobe Air技术现在已经发展成为一种跨操作系统,跨平台的新型开发技术,在移动native app游戏领域已经展露锋芒。
概述
从 ActionScript 3 的一般特性开始,我将讨论一下目标、语言特性和 Flash Player API 特性。还要讨论 ActionScript 3 中的新特性和不太为人所知的特性。在 2006 年 11 月 7 日,在
旧金山召开的 WEB 2.0 会议上,Adobe Systems 宣布将 ActionScript Virtual Machine 的
源代码捐献给 Mozilla Foundation。Mozilla 启动了一个新的开放源码项目 Tamarin,其目的是促进这种创建 Web应用程序的标准化方法的开发。
ActionScript 3 有两类特性:语言特性和 Flash Player API 特性。语言特性基本上是在 ActionScript 2 之上构建的,但是还有一些性能和功能方面的改进,包括许多运行时异常,用来改进常见的错误处理和调试。这些运行时异常会显示
堆栈跟踪,可以帮助开发人员轻松地找到错误的根源。以前的 ActionScript 版本会悄悄地掩盖错误,以避免在 Flash 中出现错误消息对话框。这在开发期间会造成困难,因为开发人员不了解可能出现的错误,就无法开发出好产品。
在运行时存储类型细节,用来进行检查并保护系统,因此 ActionScript 3 是强类型的。这还有助于减少内存使用量,因为类型信息以本机机器表示法表示变量。
ActionScript 3 完全符合 ECMAScript 第四版规范,这可以简化 XML 解析。
ActionScript 3 的 Flash Player API 特性包括:
DOM3 事件模型提供了生成和处理事件消息的标准方法,这有助于在对象之间进行更好的通信和交互。
新的 Loader 类提供了装载 Shockwave Flash 和图像的单一机制,并提供访问关于被装载内容的详细信息的方法。URLLoader 类提供了在数据驱动应用程序中装载文本和二进制数据的单独机制。
Socket 类提供了以任何格式对服务器
套接字读写二进制数据的方法。
ActionScript 3.0 包含一个 flash.text 包,它提供与文本相关的所有 API。
其他信息
Loader.loadBytes()
这个方法可以从二进制数据直接创建
显示列表中的条目。例如,在我的电子邮件客户机上,如果从 Pop3 服务器上下载的一个电子邮件包含附件,就检查附件的 mime-type。如果这种类型是播放器支持的,那么就可以将附件的二进制
源代码读入 ByteArray,并在 Flash Player 中显示这个附件。这意味着我的电子邮件客户机可以显示 PNG、JPEG、GIF 和 SWF 附件。
Sound.computeSpectrum()
这个方法分析播放的所有声音并返回一个 ByteArray,其中包含 512 个归一化的值(-1 到 1),可以使用它们显示声音波形(256 个值用于左声道,256 个值用于右声道)。可以使用这些值为 Media Players 创建 Audio Equalizers 以及对播放的声音做出反应的视觉效果。
BitmapData.getPixels()
这个方法返回一个 ByteArray,其中包含
位图的指定矩形区域中每个像素的十六进制颜色值。可以将这个方法与新的 ZLib 压缩方法 ByteArray.compress() 结合使用,从而将位图压缩,然后再发送给服务器,这样就能够将它转换为一个适合下载的文件。
Loader.close()
现在,可以停止播放器装载外部媒体的过程。在过去,如果将一个图像装载进播放器,那么在完成处理之前无法停止。现在可以这么做了。
相关优点
这个新版本具有以下优点:
这种语言支持类型安全性,使代码维护更轻松。
与其他语言相比,这种语言比较简单,容易编写。
开发人员可以编写具有高性能的响应性代码。
这种语言
向后兼容ActionScript 2 并向前兼容 ECMAScript for XML(E4X)。
Tamarin
简介
在 2006 年 11 月 7 日,Adobe Systems 宣布将 ActionScript Virtual Machine 的代码捐献给 Mozilla Foundation。因此,Mozilla 启动了一个新的开放源码项目 Tamarin。Adobe 和 Mozilla 希望以此促进这种创建 Web 应用程序的标准化语言的推广。
目标
Tamarin 项目的目标是实现一个高性能的开放源码的 ECMAScript 第四版(ES4)语言规范实现。Mozilla 在
SpiderMonkey中使用 Tamarin Virtual Machine,SpiderMonkey 是 Firefox 和其他基于 Mozilla 的产品中嵌入的核心 JavaScript 引擎。
Adobe 将继续在 Adobe Flash Player 中的 ActionScript Virtual Machine 中使用这些代码。
Tamarin Virtual Machine 当前实现 ECMAScript 第三版语言标准(这是 JavaScript、Adobe ActionScript 和 Microsoft Jscript 采用的标准),还支持 ES4 中建议的一些新语言特性。社区正在开发 ES4 的开放源码实现,Adobe 和 Mozilla 希望以此促进这种创建 Web 应用程序的标准化语言的推广。Tamarin 项目的目标是帮助开发人员创建可以跨多个平台的效果丰富的高度交互性的用户体验。
发展计划
Tamarin 将支持 ECMAScript 第四版(或者说 “JavaScript 2”)语言,并将集成进 Mozilla 2 项目中的
SpiderMonkey,预期在 2008 年发布。
Mozilla 的
开放源码项目团队刚刚开始开发 Tamarin,它的一些目标技术包括:
将 Tamarin VM 和垃圾收集器集成进SpiderMonkey中
使用 SpiderMonkey
编译器生成 Tamarin 的代码
完成 ECMAScript 4编译器
使用 ActionScript 3 的简单示例
这个 ActionScript 示例显示欢迎消息 “Hello ”。用户可以在文本框中输入用户名。按回车时,就会显示欢迎消息。
清单 1. 示例代码
package {
public class Greeter {
/**
* Defines the names that should receive a proper greeting.
*/
/**
* Builds a greeting string using the given name
*/
}
else if(validName(userName)){
}
else {
}
return greeting;
}
/**
* Check whether a name is in the validNames list
*/
if validNames.indexOf(inputName) > -1 {
return true;
}
else {
return false;
}
}
}
}
图 1 显示清单 1 的初始窗口。它显示最初的欢迎消息 “Hello, please type your name and then press the enter key”,然后等待用户在标签为 User Name 的文本框中输入用户名。
图 1. ActionScript 3 中的欢迎示例
当用户在 User Name 框中输入 “Frank” 时,脚本会在预定义的 validNames
数组中寻找这个用户名。因为 “Frank” 在 validNames数组中,所以在欢迎区域中会显示 “Hello Frank”,见图 2。
图 2. 用户输入用户名
如果用户输入的用户名不在 validNames数组中,例如 “Anitha”,那么显示消息 “Sorry, Anitha, your name is not present in the list”。
在下面,我提供了关于 ActionScript编程的出色的参考资料。还可以找到一个论坛的链接,使用 ActionScript 的开发人员在这里直接回答任何问题。新的 ActionScript Virtual Machine 和 Flash Player 有许多令人兴奋的改进,但是这超出了本文的范围。如果您还没有下载最新的 Flash Player 版本,就请下载它,体会一下它的众多优点。
参考资料
学习
您可以参阅本文在 developerWorks 全球网站上的 英文原文。
如果希望参与 Tamarin 项目,那么访问 Mozilla Foundation 了解详情并订阅邮件列表。
了解关于 ECMAScript Fourth Edition Specification 的详细信息。
寻找 ActionScript 3.0 Language Reference 的所有包。
产品和技术
下载 Flash Player 9。
下载 Flex 2 Builder 来进行 ActionScript 3.0 编程和 MXML 编程。
讨论
可以在 ActionScript 3 Forum 提出任何问题,您会很快得到答复。
通过参与 developerWorks blog 加入 developerWorks 社区。
关于作者
Anitha Ramaswamy 是在 Bangalore 的 IBM 印度软件实验室的 WebSphere Business Integration Adapters 团队工作的
软件工程师。她的专业领域包括 Java™ 和 Java 2 Enterprise Edition(J2EE™)技术。她从事 OS/2® Presentation Manager 已经三年了。她还从事开放源码 Tuscany 项目和印度软件实验室的
EPCIS团队的 RFIDIC 1.0 安装程序开发项目。她拥有 Bangalore 的 Vishwesvaraya Technological University 的电子和通信学士学位。可以通过 联系 Anitha。
代码结构
package{ //定义包名
import flash.display.Sprite; //导入外部包
public class DrawDemo extends Sprite //主类必须继承Sprite或者MovieClip
{
public function DrawDemo() //
构造函数{
this.graphics.beginFill(0xff0000); //设置
填充色this.graphics.drawCircle(0,0,30); //画一个圆(前两个参数分别代表圆心(相对于父显示对象注册点
//的圆心的x,y的位置(以像素为单位)。 )第三个代表圆的半径(以像素为单位))
//设置圆在舞台上的位置
this.x=300;
this.y=300;
this.graphics.endFill();//结束绘画
addChild(this);//所画的内容添加到舞台上
}
}
}