《Essential ActionScript 2.0》简体中文版

来源:本站整理  作者:闪吧
摘要:第一部分 ActionScript 2.0语言基础在这一部分你将学到ActionScript2.0的面向对象的概念,基本原理,语法,用法。即使你从来没使用过OOP(面向对象的程序设计),第一部分将会让你理解并运用OOP。这一部分包括类,对象……

第一部分 ActionScript 2.0语言基础

在这一部分你将学到ActionScript2.0的面向对象的概念,基本原理,语法,用法。即使你从来没使用过OOP(面向对象的程序设计),第一部分将会让你理解并运用OOP。这一部分包括类,对象,方法,属性,继承,成员,接口,包和很多其他的核心OOP概念。除了教你OOP基础,还帮助你决定OOP对你的项目有多少好处,并帮助你构建类和类的方法。

第一章:ActionScript 2.0概述

在本书的整个学习过程中,我们将在Flash中尽可能的学习ActionScript2.0和面向对象的程序设计。有很多东西要学,但是在我们认真详细地学之前,我们先了解一下ActionScript2.0的核心特征概要和Flash Player 7的新功能。如果你有ActionScript1.0背景,那么这个概要会让你知道在这个语言中有哪些变化。相反,如果你完全是一个Flash或者ActionScript新手,那么建议你直接看第二章。

1.1 ActionScript 2.0的特点

ActionScript 2.0引入到Flash MX 2004和Flash MX Professional 2004,是对基于Flash 5 and Flash MX的Action Script(称为ActionScript1.0)的巨大补充。ActionScript 2.0只增加了少量的运行时功能性,但是极大地改善了在Flash中面向对象的开发,使OOP(面向对象的程序设计)语法和方法学更加正式化。

尽管在ActionScript1.0中仍然可以进行面向对象式的开发,但是它缺少一个传统而正式的元素库来创建类和对象。ActionScript 2.0增加了对传统的面向对象提供了语法支持。比如,ActionScript 2.0提供了class关键词来创建类,extend关键词来建立继承。而这些关键词在ActionScript1.0中是没有的(尽管还是可以创建作为类使用的典型的对象的)。ActionScript 2.0的传统性的OOP语法会使来自其他OOP语言(如Java, C++) 的程序员感到很熟悉。

下面是ActionScript 2.0的一些关键特征。如果这些对你来说是新事物,那么不用担心,本书将会在后面的章节中详细讲述:

*class语句,用来创建正式的类,关于类的语句,将在第四章中详细讲述。

*关键字extend,用来建立继承。在ActionScript 1.0中,继承主要是通过prototype属性来建立的,但也可以通过_ _proto_ _属性来建立。关于继承,将在第六章详细讲述。

*interface语句,用于创建Java风格的接口(比如抽象数据类型)。使用关键字implements,类可以准备接口的执行。ActionScript 1.0不支持接口。关于接口,将在第八章详细讲述。

*类文件的正式扩展名是.as。以前,类可以被定义在时间线代码中或者外部.as文件中,而现在,ActionScript 2.0要求类必须被定义在外部类文件中。类文件可以在Flash MX Professional 2004的脚本编辑器中编辑,也可以在外部文本编辑器中编辑。

*正式的方法定义语法,用于在类中创建实例属性和类属性。在ActionScript 1.0中添加类的方法要用过类构造器的prototype属性。请参考第四章。

*正式的getter和setter方法的语句,它代替了ActionScript 1.0的Object.addProperty()方法,请参考第四章。

*正式的属性定义语法,用于在类中创建实例属性和类属性,在ActionScript 1.0中,可以通过几种方式添加实例属性----通过类构造器主类型属性添加,在构造函数中添加或者直接在每个对象中添加。此外,在ActionScript 1.0中,类属性可以在类构造函数中直接定义。请参考第四章。

*关键字private和public,用于防止某些方法和属性被其他类从外部访问。

*变量,属性,参数合返回值的静态类型,用于声明每一个元素的数据类型。这样就消除了通过在错误的场合使用错误的数据类型引起的错误。请参考第三章关于类型搭配错误的详细信息。

*类型转换,用于告诉编译器把一个对象当作一个实例的数据类型来处理,因为有时候当使用静态类型时就必须这样做。请参考第三章关于类型转换的详细内容。

*类路径,用于定义一个或多个中心类库的位置。这样就允许类在项目中被重复使用,并且使源文件更加容易管理。请参考第九章。

*错误处理--包括throw(抛出)和try/catch/finally语句,用于生成并响应程序错误,请参考第十章。

*通过符号链接属性使影片片断符号与ActionScript2.0类的链接更容易。这就使得MovieClip继承比在ActionScript1.0中更容易执行,而ActionScript1.0则必须使用 #initclip和Object.registerClass( )。请参考第十三章。

1.2 Flash Player 7带来的新特性

Flash Player 7引入了一些重要的新的类和新功能,更增强了ActionScript 2.0语言。这些新特性只有在使用Flash Player 7(或以后版本)播放Flash Player 7制式的电影时才可以体现出来(关于影片输出的更多信息请参考本章的"设置电影ActionScript版本和Flash Player版本").虽然这些新特性不是本书主要关注对象,但本书将会在跟你一起探讨ActionScript 2.0的过程中涉及到一些。

Flash Player 7的重要新特性包括:

*新的数组分类功能

*ContextMenu和ContextMenuItem类。用于当用户右击(windows)或Ctrl点击(Mac)Flash电影的时候出现的Flash Player自定义菜单。

*跨范围政策文件允许数据和内容从一个外部位置加载。

*加载MP3文件的ID3 v2标签支持

*在文本域中的鼠标滚轮支持(仅限于windows)

*改进的MovieClip层级管理方法

*加载影片片断和图像的MovieClipLoader类

*比以前更好控制的打印效果的PrintJob类。

*在文本域的图片支持,包括环绕图片文字。

*改进的文本显示(文本在文本域中具有比在Flash Player 6中更精确的尺寸调整能力)

*对文本域的样式层叠表(CSS)支持,允许影片中的文本格式使用CSS。

*改进的ActionScript运行时性能

*精确的软件灵敏度。

本书的主题是ActionScript2.0核心。因此,上面的Flash Player的特性并没有详细地讲述。关于Flash Player 7的更多详细信息,请参考Flash的在线帮助(帮助-->ActionScript参考指南-->新特性)。

1.3 FlashMX2004 V2组件

Fash MX引入了components(组件)随即使用的界面窗口部件和代码模块,而这个在一般函数中都需要。Flash的内置组件已经使创建一个桌面风格的Flash应用程序变得像最容易了,FlashMX2004引入了在ActionScript 2.0中重新编写的v2 components(即第二代组件),并成为Macromedia组件体系结构的最高峰,提供了更为丰富的新特性。新的结构体系就要求新的开发和使用组件的方式(参考第十二章的组件的使用)。一般来讲,第二代组件要求Flash Player 6.0.79.0或以上版本,但测试表明,很多V2 组件也可以运行在Flash Player 6(特别是Flash Player 6.0.40.0以上版本)中。如果你要在Flash Player 6.0.79.0以前版本中运行V2组件,那么你应该多次测试你的应用程序。

如果Flash MX的V1 组件已经更新,支持ActionScript 2.0并且电影也是ActionScript 2.0格式的,那么用Flash MX 2004或Flash MX Professional 2004 制作的单个应用程序既可以包含V1组件,也可以包含V2组件。

不要把V1和V2组件与ActionScript的版本混淆。尽管,V2组件是用ActionScript2.0编写的,而且用ActionScript1.0编写的V2组件是不存在的。但是虽然v1组件一开始是用ActionScript1.0编写的,但是在ActionScript2.0下仍然可以得到编译更新。

提示:选择用户界面的目录下的" Flash MX 2004的Flash MX 组件"就可以到Flash扩展(http://www.macromedia.com/exchange/flash)把V1组件更新到被ActionScript 2.0支持。

如果没有更新的V1组件(即使用ActionScript 1.0编写的组件)和V2组件在一部电影中同时使用,根据组件使用的不同,会发生编译时和运行时错误。

注意:不要把ActionScript 1.0中的OOP技术与ActionScript 2.0代码混淆。如果你使用了类,继承或其他OOP元素,那么请确保你的代码符合ActionScript 2.0标准。

新的V2组件包括:

*新的用于处理组件事件的监听事件模型,能使很多外部对象接收单个组件事件。

*CSS样式表支持,使通过组件来改变文本样式变得更简单!

*焦点管理,支持在用户界面上改变焦点

*层级管理,在屏幕上管理可见的组件堆

*更为丰富的访问支持(即对屏幕读取的更优越的支持)

*更丰富的皮肤功能支持(即图形替换)

*在单个文件中的组件资源封装,使组件管理和共享变得更简单

v2组件趋向于比与v1相对应的组件更庞大。特别是在只使用一个或2个组件的时候,这一点尤为明显。因为v2组件结构体系只优化了至少使用了3至4个不同类型组件的应用程序。因此,如果你只需要1,2个组件,并且你不需要焦点管理和访问支持,那么使用v1组件会加快加载速度。

注意v2组件的默认主题"halo"不支持滚动条和按钮的自定义颜色。换句话说,在Flash MX 2004 and Flash MX Professional 2004中的默认v2组件主题里,scrollTrackColor和buttonColor的风格属性不起作用。要设置v2组件中按钮和滚动条的颜色,必须把新的主题应用到文档,参考 帮助-->使用组件(-->自定义组件’译者)-->关于主题-->将主题应用到文档。

表 1-1完整的说明了Flash MX 2004和Flash MX Professional 2004中的组件。专业版独有的组建仍然可以在Flash MX 2004中运行。也就是说,一个包含了只有专业版才有的组件的.fla文件仍然可以在Flash MX 2004中打开并正常运行。Macromedia的最终用户许可协议中并没有明确禁止在Flash MX 2004(标准版)中使用专业版独有的组件。

提示:表1-1详见《Essential ActionScript 2.0》英文版相应表格。

在第十二章,我们将学习使用v2组件的程序图形和OOP应用程序。

1.4 在Flash Player6和7中的ActionScript1.0与2.0

与JavaScript1.5一样,ActionScript1.0是基于ECMAScript 3标准的,而 ActionScript 2.0则是基于ECMAScript 4的(理论上JavaScript2.0也是如此)。我们在前言的"ActionScript 2.0与ActionScript 1.0"一节已经知道,这两个版本有很多类同之处;他们有很多共通的非OOP语法特性,如循环,条件语句和操作符等。

尽管ActionScript 2.0是ActionScript语言的首选版本,但是ActionScript 1.0的语法在Flash Player 7 中完全支持,而并没有被排斥。我们粗看一下就知道,在Flash MX 2004和Flash MX Professional 2004中既可以编写ActionScript 1.0也可以编写ActionScript 2.0(但在Flash MX中无法编写ActionScript 2.0)。尽管会有一些次要的例外(将会在本书中说明),但是,ActionScript 2.0代码仍然可以与Flash Player 6兼容。但是,ActionScript 2.0不能与Flash Player的旧的版本兼容,如Flash Player 5或Flash Player 4。

如果你是ActionScript 1.0程序员,那么你可以把ActionScript 2.0理解为高于ActionScript 1.0语法现象。也就是说ActionScript 2.0和ActionScript 1.0都编译为同样的.swf字节码(ActionScript 2.0有一些微小的附加功能)。对于Flash Player而言,运行时,ActionScript 2.0和ActionScript 1.0几乎没有差别(不包括上述的微小的附加功能)。举个例子来说,一旦一个ActionScript 2.0的类,比如, Rectangle类,被编译成一个.swf文件,那么这个类在运行时就以Function(函数)对象存在,就像ActionScript 1.0中的函数声明(用作类构造器)一样。一个ActionScript 2.0的Rectangle实例被赋予_ _proto_ _ 属性,即 Rectangle.prototype,同样,在Flash Player 看来这跟ActionScript 1.0中相应的函数毫无差别。

但在很大的程度上,你不你担心这些编译器和运行时背后的问题。如果你开始转向ActionScript 2.0(我想你应该这样!),那么你可以完全忘记ActionScript 1.0基于原型的编程了!实际上,大部分ActionScript 1.0的运行时动态处理对象和类的技术在ActionScript 2.0看来是很糟糕的,并且,如果把两者代码混合使用的话,会导致编译器错误。但不要害怕,本书会特别指出有问题的ActionScript 1.0实例,并说明如何用ActionScript 2.0的相应功能来替换。

1.4.1 设置影片的ActionScript版本和Player(播放器)版本

Flash MX 2004允许你输出与某个Flash Player版本兼容的.swf文件。不要把这与最终用户安装的Flash Player版本相混淆,最终用户安装的Flash Player是你无法控制的,除非你检查他们的Flash Player版本,如果需要的话,建议他们升级。

要设置一个.swf文件的版本,请使用下拉菜单"文件-->发布设置-->Flash-->版本"。考虑到最大的兼容性,一般设置.swf文件的Flash Player的最低版本。如果.swf文件的版本比用户Flash Player的版本高,那么很可能会无法显示,代码执行失败。

设置Flash影片有如下的作用:

*影片将与某个Flash Player版本(或以上版本)兼容(即可以播放)。而在早期版本,大部分ActionScript 代码不能被正确执行或者根本不能执行。

*影片将可以在最近的Flash Player版本中正确播放,即使使用了某个版本的改变了的特性。换句话说,最新版的Flash Player可以正确播放就版本的.swf文件。比如说,Flash Player 6格式的.swf文件的ActionScript标识符在Flash Player 7中播放是不区分大小写的,尽管Flash Player 7格式的.swf文件的ActionScript标识符区分大小写。然而,有一个例外:在Flash Player 7中跨范围数据加载规则的安全性改变在某些情况下会影响 Flash Player 6格式的.swf文件。更多信息请参考:http://moock.org/asdg/technotes/crossDomainPolicyFiles

在Flash MX 2004或Flash MX Professional 2004中导出Flash Player 6和Flash Player 7格式的影片时,你可以告诉Flash是否把代码编译为ActionScript 1.0或者ActionScript 2.0。在开发之初,你一定会做出选择,因为你不想在最后重写代码。创建.swf文件时,要确定ActionScript编译器版本,可以使用下拉菜单"文件-->发布设置-->Flash-->ActionScript版本"

本文下面的部分中,本书将默认你使用ActionScript 2.0编译器。当ActionScript版本设置为ActionScript 1.0时,将会有以下变化:

*ActionScript 2.0语法将无法识别,ActionScript 2.0的特性,如类型检查(包括post-colon语法)和错误处理,将导致编译器错误(Flash Player 6格式的影片)或者运行失败(Flash Player 7格式的影片)。

*Flash 4的变量"slash语法"将被支持(但这种编成方式已经被放弃,不推荐使用)。

*ActionScript 2.0的保留字,如class, interface,和public,将被当作标识符处理(但这种代码以后会很难升级,不鼓励使用)。

如果影片发布为Flash Player 6格式的.swf文件,那么不管使用哪个版本的Flash播放器,以下的ActionScript 2.0特性都将无法发挥作用:

*例外处理(见第十章)

*区分大小写。(Flash Player 6格式的脚本是不区分大小写的,即使是在Flash Player 7中播放。但请注意!Flash Player 7格式的.swf文件的ActionScript 1.0代码在Flash Player 7中播放时是区分大小写的。见表1-2。)

*类型转换(请参考第三章的"运行时类型支持")。

表1-2列出了.swf文件版本和用户Flash Player的版本不同情况下的却分大小写的状况。注意,运行时是否区分大小写与选择的ActionScript编译器的版本没有关系,而取决于导出的.swf文件和Flash Player的版本。在其他情况下,表1-2的脚注表明了代码不区分大小写的例外情况。关于Flash Player 6中区分大小写的说明,请参考我的另一本书:《ActionScript for Flash MX: The Definitive Guide(O’Reilly) 》(《ActionScript for Flash MX权威指南》)。

提示:表1-2详见《Essential ActionScript 2.0》英文版相应表格。

**5标识符(即变量和属性名称),函数名称,帧标签和符号输出ID,在Flash Player 6格式的.swf文件中是不区分大小写的。但是保留字。如if,即使在Flash Player 6中也是区分大小写的。

**6 Flash Player 6是不能播放Flash Player 7格式的.swf文件的。

1.4.2在Flash Player 7中ActionScript 1.0的变化

在Flash Player 7中播放Flash Player 7格式的.swf文件的时候,某些ActionScript 1.0代码与 在Flash Player 6中播放,效果是不同的。这些改变使Flash Player 7更接近于ECMAScript 3标准。特别是:

*值undefined,作为数值使用的时候转化为数字"NaN";作为字符串使用时,转化为字符串"undefined"(在Flash Player6中,undefined分别转化为数字0和空字符串"")。

*当作为布尔型使用时,所有的非空字符串都转化为布尔值true(在Flash Player6中,只有当一个字符串可以转化成合法非零数字的时候才能被转化为true,否则将转化为false)。

*标识符(函数名,变量名,属性名等等)是区分大小写的。比如,标识符firstName和firstname在Flash Player 7中是两个不同的变量。而在Flash Player6中他们是同一个变量(但通常,帧标签和符号链接ID是不区分大小写的).

只有当你要使用Flash Player 7独有的特性而把Flash Player 6格式的影片升级为Flash Player 7格式影片的时候,上述变化才会影响你。也就是说,如果你要更新你的电影,你必须测试和修改你的代码,以确保你的电影在Flash Player 6和Flash Player 7中有同样的效果。如果你不需要使用Flash Player 7独有的特性,那么你可以继续把电影导出为Flash Player 6格式,这时候在Flash Player 6和Flash Player 7中播放效果是一样的。这是最后一点要强调的。

提示:Macromedia竭尽全力确保较老版本格式的电影如Flash Player 6格式,仍然可以继续在以后的版本中正常播放,如Flash Player 7。但是,当你发布了以一个Flash Player 7格式的电影的时候,就必须注意以前.swf格式的版本发生的变化。你的ActionScript的改变取决于.swf文件的版本,而不是Flash Player的版本。

当然,新创建的 Flash Player 7格式的.swf文件(不仅仅是那些由 Flash Player 6格式升级过来的.swf文件)必须遵循新的协定,所以在以后的学习中,请记住这一点。请记住,这些新的协定,使ActionScript语其他一些语言相一致,如JavaScript和Java,使他们之间的代码移植更为容易。

1.4.3.Flash 4的Slash语法在ActionScript 2.0中不受支持。

在Flash4和后来的版本中变量可以被"Slash"语法引用。例如,在Flash 4中,下面的代码就是对影片片断ball的变量x的引用。

/ball:x

如果你在ActionScript 2.0中使用这个语法,无论你输出为Flash Player 6还是Flash Player 7格式,都将产生下面的错误:

1.5.让我们开始面向对象的程序设计

现在,我们稍微了解了ActionScript 2.0,我们已经可以开始在Flash中学习面向对象的编程了! 准备好了吗?让我们开始学习第二章吧!

谢谢,请大家多多批评指导

8.1

【相关文章】好搜一下
Flash ActionScript图文教程:处理事件篇

Flash ActionScript图文教程

事件,是推动Flash程序运行的灵魂,可以说,没有事件就没有Flash程序,真是…