本文节译自O'Reilly授权东南大学出版社出版的《Essential ActionScript 3.0》(影印版),作者:Colin Moock。
本次翻译纯属个人兴趣,除学习自娱以外,无意用作其它任何用途。
本次翻译未征求原作者及出版社意见,如涉及版权问题,请与本译者取得联系:< hu1980@gmail.com>,本译者将积极配合处理。
本译者保留对擅自将本译文用作商业用途者依法追究其责任的权利。
本次翻译纯属个人兴趣,除学习自娱以外,无意用作其它任何用途。
本次翻译未征求原作者及出版社意见,如涉及版权问题,请与本译者取得联系:< hu1980@gmail.com>,本译者将积极配合处理。
本译者保留对擅自将本译文用作商业用途者依法追究其责任的权利。
第一章
基础概念
编写ActionScript代码的工具
Flash客户运行时环境
编译
快速回顾
类和对象
创建一个程序
包
定义一个类
虚拟动物园回顾
构造器方法
创建对象
变量和值
构造器参数和参量
表达式
将一个变量的值赋给另一个
为宠物定义的实例变量
实例方法
成员和属性
虚拟动物园回顾
休息时间!
程序,是被计算机或软件应用程序执行的书面指令集。程序的书面可读的文本叫作
源代码,或简称代码。创建程序的人叫作
程序员、
编码员或
开发员。每个程序都是用一种特定的编程语言编写的,就像每本书都是用一种特定语言(如英语、俄语、日语等)写的一样。程序员必须使用编程语言所规定的语法和规则来组织一个给定程序中的指令。本书覆盖了ActionScript 3.0这种编程语言的语法、原理和用法的全部内容。
ActionScript代码是用纯文本编写的,所以ActionScript程序可以仅由简单的文本编辑器来创建,如Windows上的记事本或Macintosh上的TextEdit。然而,大多数ActionScript程序员都使用Adobe公司出品的两个商业软件之一(或两者都用):
Flex Builder和
Flash制作工具。
Flex Builder是
集成开发环境,或者叫
IDE。IDE是用来编写和管理代码的应用程序,就像字处理程序是来用创建和打印文档的程序一样。程序员用Flex Builder来创建软件应用和多媒体内容,使用ActionScript或
MXML,或两者都用。MXML是基于XML的语言,用来描述用户界面。
相比之下,Flash制作工具是一个设计、动画和编程的杂合编辑器。程序员使用Flash制作工具,通过结合ActionScript代码和手工绘制的图形、动画和多媒体资源,来创建软件应用和多媒体内容。
ActionScript 3.0被Flex Builder 2或更高版本和Flash CS3(版本9的Flash制作工具)或更高版本所支持。要获得一个Flex Builder的拷贝,请访问
http://www.adobe.com/products/flex/productinfo/overview/,要获得一个Flash制作工具的拷贝,请访问
http://www.adobe.com/go/flash/。
本书的绝大部分集中于用纯ActionScript(即只用代码)来创建软件应用和多媒体内容。第29章包含了ActionScript在Flash制作工具中的用法。本书特别不包含MXML的内容,要了解MXML的有关内容,请参阅O'Reilly的《Flex2编程》(Kazoun和Lott合著,2007年)和Adobe的Flex Builder文档。
ActionScript程序可以在三种不同的软件应用程序(都是Adobe出品)上执行:
Flash播放器、
Adobe AIR和
Flash Lite。
Flash播放器在网页浏览器中或在桌面单机模式下执行ActionScript程序。Flash播放器几乎没有操作系统访问权(例如:它不能管理文件、控制窗口或访问大部分硬件)。
Adobe AIR在桌面上执行ActionScript程序并且和桌面操作系统完全集成(例如:它可以管理文件,控制窗口并访问硬件)。
Flash Lite在移动设备,如手机上执行ActionScript程序。本书出版时,Flash Lite可以执行ActionScript 2.0但不能执行ActionScript 3.0编写的ActionScript程序,而Flash播放器和Flash AIR可以执行ActionScript 3.0编写的程序。因此,本书讲授的技术适用于Flash播放器和Flash AIR但不适用于Flash Lite,除非它增加了对ActionScript 3.0的支持。
一般来说,Flash播放器、Adobe AIR和Flash Lite都被称为
Flash客户运行时环境(或简称
Flash运行时),因为当ActionScript程序被执行或“运行”时,它们管理着程序。Flash运行时在Windows、Macintosh和Linux以及多种不同的移动硬件设备上可用。因为ActionScript程序是被Flash运行时,而不是被特定的操作系统或硬件设备执行,每个ActionScript程序都被认为是
可移植的,因为它可以在不同的硬件设备(手机,游戏控制台)和操作系统(Windows,Macintosh和Linux)上运行。
在非正式的讨论中,术语
ActionScript虚拟机有时被用作Flash客户运行时环境的同义词。然而,这二者之间还是有差异,所以它们不应当被互换使用。ActionScript虚拟机(AVM)在技术上是在Flash播放器、Adobe AIR和Flash Lite内部执行ActionScript程序的软件模块。但是每个Flash运行时还负有其它责任,如显示内容到屏幕、播放视频音频以及和操作系统通信。运行ActionScript 3.0代码的ActionScript虚拟机的特定版本称为AVM2,运行ActionScript 1.0和ActionScript 2.0代码(本书未包含)的ActionScript虚拟机的特定版本称为AVM1。
ActionScript程序在可被Flash运行时执行之前,必须从人可读的ActionScript 3.0代码转化为一种Flash运行时所理解的浓缩的二进制形式,称为
ActionScript字节码,或
ABC。然而,ActionScript字节码本身不能被Flash运行时执行;而必须被封装到一个称为
.swf文件的二进制容器文件中,.swf文件把字节码和任何ActionScript程序所需的嵌入媒体资源都存储到
Flash文件格式或称
SWF中。将ActionScript程序转化为字节码的过程叫作
编译该程序,生成.swf文件的过程叫作
编译该.swf文件,有时也叫
输出或
发布该.swf文件。
要编译ActionScript 3.0程序和.swf文件,我们使用一个叫
编译器的软件模块。编译ActionScript代码的编译器叫作
ActionScript编译器;生成.swf文件的编译器叫作
SWF编译器。任何声称完全支持Flash文件格式的SWF编译器都包括一个ActionScript编译器。自然,Flex Builder 2和Flash制作工具都包含一个SWF编译器(并额外包括一个ActionScript编译器)。Flex Builder 2和Flash制作工具共享同一个ActionScript编译器,但却有不同的SWF编译器——分别叫作
Flex编译器和
Flash编译器。Adobe还把Flex编译器作为一个单独的命令行程序提供,叫作
mxmlc。mxmlc编译器包含在Adobe的免费开发者工具包
Flex 2 SDK中,在
http://www.adobe.com/go/flex2_sdk可以得到。
即时编译(Just-In-Time Compilation)
当ActionScript程序运行的时候,Flash运行时读取编译过的ActionScript字节码并将它翻译成本地机器码指令,在它所运行的特定的计算机硬件上执行。很多情况下,本地机器码指令被保存下来以便它们可以再次使用而不需要重新从ActionScript字节码翻译。
将ActionScript 3.0代码转化为字节码叫作编译,同样,将ActionScript字节码翻译成本地机器码并留待后续执行的过程也叫作编译。首先,程序员将人可读格式的代码编译成Flash运行时所理解的格式(ActionScript字节码),然后,Flash运行时自动将ActionScript字节码编译成运行程序的硬件所理解的格式(本地机器码),后面这种编译形式(字节码到机器码)被称为
即时编译,或
JIT,因为它就在程序需要特定的被编译的字节码之前立即发生。即时编译有时也叫
动态翻译。有经验的程序员可能有兴趣了解,类定义的顶层不是即时编译的(因为它只被执行一次)。
前面几页覆盖了很多基础,让我们来回顾一下到现在为止都有些什么。
ActionScript程序是一个指令集,它被Flash运行时:Flash播放器、Adobe AIR或Flash Lite中的一个所执行。ActionScript程序可以用文本编辑器、Flex Builder或Flash制作工具来编写。要运行一个ActionScript程序,我们必须先用SWF编译器将它编译成.swf文件,如Flash制作工具中包含的Flash编译器,或Flex Builder 2和Flex 2 SDK中都包含的mxmlc。
如果上述一些概念或术语对你来说陌生,别担心,在后面的900多页中我们将对它们有充分的接触。
现在,让我们来写些代码吧!
想像你要造一架飞机,完全从零开始,想想看你可能会依照怎样一个过程。你很可能不会只是跑到一家金属店去开始焊接。你必须先为飞机画一张蓝图,实际上,若你是从零开始造这架飞机,你可能需要不止画一张而是很多张蓝图——为飞机的众多部件(轮子、机翼、座位、制动装置等等)每个一张。每张蓝图概念性地描绘一个特定部件。要造这架飞机,你可能会独立生产每一个部件,然后再按照主蓝图将它们装配起来。装配的部件之间相互协作将产生飞机的行为。
如果这些你听来都合乎逻辑,你已经明白成为一名ActionScript程序员需要些什么了。就像飞机翱翔天际是源自一组蓝图上的部件的相互协作一样,一个运行的ActionScript程序是一组相互协作的
对象,它们基于一系列的
类。ActionScript对象既代表有形事物也代表程序中的无形概念。例如,一个对象可能代表着一个运算中的数字、一个用户界面上的可点击按钮、日历上的一个时间点或一个图像上的模糊效果。对象是类的具体化,或者说
实例;类是基于它之上的对象的蓝图。
编写一个新的程序的第一步是要确定它的类。每个类用代码的形式描述着一个特定类型的对象的特性和行为。程序中的一些类必须从零开始编写,而其它的则由ActionScript和不同的Flash运行时提供。从零开始编写的类(称作
自定义类)用来产生特殊用途的内容,如购物程序中的订单、赛车游戏中的汽车或聊天程序中的消息。另一方面,由ActionScript和不同的Flash运行时提供的类(称作
内建类)用来执行基础任务,如创建数字和文本、播放声音、显示图像、访问网络和响应用户输入。
我们通过程序中的类来制造(或者说
实例化)对象,然后告诉这些对象做什么。对象做的事决定着程序的行为。
提示:用类和对象来创建程序叫作
面向对象编程(OOP)。
下一节我们将开始编写一个实际的程序,但在此之前,让我们简单认识一下一组重要的类,称为
本地类,它们是直接内建于ActionScript中的。表1-1中列出的本地类用来操作基本类型的信息,如数字和文本。你可以期望在你写的每一个程序中用一两个本地类的实例——很像你制造飞机时可能会用到来自第三方供应商的现成部件一样。把表1-1过一遍,基本熟悉一下,在接下来的几章中,我们将对本地类有更详细的学习。
类 | 描述 |
---|---|
String | 表示文本数据(即一串字符) |
Boolean | 表示逻辑状态true和false |
Number | 表示浮点数(即有小数值的数) |
int | 表示整数(即没有小数值的数) |
uint | 表示正整数 |
Array | 表示顺序列表 |
Error | 表示程序错误(即你代码中的问题) |
Date | 表示一个特定的时间点 |
Math | 包含通用的数学数值和运算 |
RegExp | 定义查找和替换文本的工具 |
Function | 表示可重用的、可反复执行或调用的指示集 |
Object | 定义ActionScript中每一个对象的基本特性 |
现在让我们试着在一个示例程序中使用类和对象——一个简单的由虚拟动物组成的模拟动物园游戏。
提示:用Flash制作工具中的时间轴脚本编制技术,可能不必事先创建类就可以创建ActionScript程序(见29章)。但是,即使你永远不打算自己创建类,你还是应该学习本章介绍的技术。了解类是如何创建的将大大加深你对ActionScript的认识并使你成为一个更加优秀的程序员。