ActionScript 3.0 完全自学手册电子教案


第1章 AcionScript 3.0概述 • ActionScript 3.0是针对Flash Player运行时环 境的编程语言,它用于处理各种人机交互、数据 交互等功能。本章将粗略的介绍ActionScript语 言的发展历史、新增特色、编程环境等内容,以 及第一个ActionScript3.0程序。 1.1 关于ActionScript 3.0 • ActionScript3.0是随着Adobe Flash CS3和Flex 2.0的推出而同步推出的脚本编程语言。本节将对 ActionScript3.0进行简要的介绍,并通过一些具 体的实例图片,展示了常见的ActionScript的应 用领域。 1.1.1 ActionScript 3.0介绍 • ActionScript3.0与ActionScript以前的版本有个本质上的 不同。它是一门功能强大、符合业界标准的一门面向对象 的编程语言。它在Flash编程语言中有着里程碑的作用,是 用来开发富应用程序(RIA)的重要语言。 • ActionScript 3.0在用于脚本撰写的国际标准化编程语言 ECMAScript的基础之上,对该语言做了进一步的改进,可 为开发人员提供用于丰富Internet应用程序(RIA)的可靠 的编程模型。开发人员可以获得卓越的性能并简化开发过 程,便于利用非常复杂的应用程序、大的数据集和面向对 象的、可重复使用的基本代码。ActionScript 3.0在Flash Player 9中新的ActionScript虚拟机(AVM2)内执行,可 为下一代RIA带来性能突破。 1.1.2 ActionScript 3.0能做什么 • 最初在Flash中引入ActionScript,目的是为了实现对Flash影片的播放控 制。而ActionScript发展到今天,其已经广泛的应用到了多个领域,能够 实现丰富的应用功能。 • ActionScript 3.0最基本的应用与创作工具Adobe Flash CS3结合,创建 各种不同的应用特效,实现丰富多彩的动画效果,使Flash创建的动画更 加人性话,更具有弹性效果。这些基础应用当中,应用最为广泛的就是使 用ActionScript脚本控制的弹性菜单。下面是一个弹性的效果, 1.2 ActionScript 3.0的新特色 • ActionScript 3.0包括二部分:核心语言和Flash Player API。核心语言用于定义编程语言的基本 结构, 比如声明变量,创建表达式控制程序结构 和数据类型等。Flash Player API是由一系列用 于实现特定功能的flash player类组成。 1.2.1 核心语言的新特色 • ActionScript3.0核心语言与ECMAScript标准兼容,并和新 改进的一些功能区域进行结合。下面是对一些其开发者方 便的地方和用法总结的一些新特点: •1.运行时的异常处理机制 •2.运行时类型 •3.密封类 •4.闭包方法 •5.E4X •6.正则表达式 •7.命名空间 •8.新基元类型 1.2.1 Flash Player API 新功能 • Flash Player API为增强Flash Player容纳 ActionScript语言的能力而引入的一组类和功 能。这种功能把ActionScript核心语言和Flash平 台之间建立了一座桥梁,大大提高了Flash应用程 序的能力,并对核心语言起到了重要的补充作 用。下面列出一些Flash Player API功能的新特 点: •1.DOM3事件模型 •2.显示列表API 1.3 Flash CS3的动作面板介绍 • Flash CS3中可以使用动作面板、“脚本窗口”或 者外部编辑器的创作环境中田间ActionScript代 码。本节就来介绍一下Flash CS3的动作面板窗口 和Flash CS自带的编辑器窗口,并将详细的介绍 功能按钮的作用。 1.3.1 动作面板概述 • 如果要在Flash CS3中加入ActionScript代码,可以直接使用动作面板来输入。 • 要打开动作面板,请执行下面的操作:单击【窗口|【动作】,或者按【F9】。 • 打开后的动作面板如图所示。 • 下面对图中各部分的名称及作用加以说明。 • A:脚本窗格,用于输入代码的地方。 • B:面板菜单,单击后可显示动作面板功能菜单 • C:动作工具箱,可以通过双击或者拖动的方式将其中的ActionScript元素添加到脚 本窗格中。 • D:脚本导航器,其有两个功能,一是通过单击其中的项目,可以将与该项目相关的 代码显示在脚本窗口中,二是通过双击其中的项目,对该项目的代码进行固定操作。 1.3.2 脚本窗口概述 • Action Script 3.0是很好的面向对象编程语言, 同样Flash CS3也提供了一个很不错的脚本编辑 器,这就是Flash的脚本窗口。使用脚本窗口可以 创建或者导入外部的脚本文件,这些文件可以是 ActionScript、Flash Communication或Flash JavaScript文件。 1.3.3 动作面板和脚本窗口的工具介绍 • 在动作面板和脚本窗口的上侧都有一排功能按钮,利用这些功能按钮可以 很方面的进行ActionScript代码的输入和编写,下面对这些按钮进行具体 的说明。 • :将新项目添加到脚本中按钮,该按钮主要用于显示语言元素,这些元素 同时也会显示在“动作”工具箱中。可以利用它来选择要添加到脚本中的 项目或者元素名称。 • :查找按钮,主要用于查找并替换脚本中的文本。 • :插入目标路径按钮(仅限动作面板),可以帮助为脚本中的某个动作设 置绝对或相对目标路径。 • :语法检查按钮,用于检查当前脚本中的语法错误。 • :自动套用格式按钮,用来调整脚本的格式以实现正确的编码语法和更好 的可读性。 • :显示代码提示按钮:用于在关闭了自动代码提示时,可使用此按钮来显 示正在吃力的代码行的代码提示。 • :调试选项按钮(仅限动作面板),用于设置和删除断点,以便在调试时 可以逐行执行脚本中的每一行。 1.3.3 动作面板和脚本窗口的工具介绍 :折叠成对大括号按钮,用于对出现在当前包含插入点的成对大括号或小括号 间的代码进行折叠。 • :折叠所选按钮:用于折叠当前所选的代码块。 • :展开全部按钮:用于展开当前脚本中所有折叠的代码。 • :应用块注释按钮,用于将注释标记添加到所选代码块的开头和结尾。 • :应用行注释按钮,用于在插入点处或所选多行代码中每一行的开头处 添加单行注释标记。 • :删除注释按钮,用于从当前行或当前选择内容的所有行中删除注释标 记。 • :显示/隐藏工具箱按钮,用于显示或隐藏“动作”工具箱。 • :脚本助手按钮(仅限动作面板),其用于打开和关闭“脚本助手”模 式。 • :帮助按钮,用于显示“脚本”窗格中所选 ActionScript 元素的参考信 息。 • :面板菜单 (仅限动作面板),包含适用于动作面板的命令和首选参 数。 1.4 ActionScript 3.0的首选参数设置 • 无论是在动作面板还是脚本窗口中编辑ActionScript代码,都可以通过设 置首先参数来配置输入的ActionScript代码的格式。 • 要设置ActionScript 3.0的首选参数,需要先打开首选参数窗口。请执行 下面的操作:选择【编辑】|【首选参数】,打开首选参数对话框, • 1. 工具提示样式的代码提示 • 2.使用菜单样式的代码提示 1.5 面向对象编程概述 • ActionScript 3.0是为面向对象编程而准备的一种脚本语 言。本节将简单介绍一下面向对象编程的基本概念。 • 面向对象编程,英文为:Object Oriented Programming, 简写为OOP,意思为面向对象程序设计,它是一种计算机编 程架构。 • 程序(program)是为实现特定目标或者解决特定问题而用 计算机语言编写的命令序列的集合。它可以是一些高级程 序语言开发出来的可以运行的可执行文件,也可以是一些 应用软件制作出的可执行文件,比如Flash编译之后的SWF 文件。 • 编程是指为了实现某种目的或需求,使用各种不同的程序 语言进行设计,编写能够实现这些需求的可执行文件。 1.6 Flash CS3的第一个“Welcome You” • Flash CS3中有两种写入ActionScript 3.0代码的方法: • 一种是在时间轴的关键帧加入ActionScript代码。 • 另一种是在外部写出呢个单独的ActionScript类文件,然 后在绑定或者导入到fla文件中来。 • ActionScript中的类有三种用法:一是和Flash中的库元件 进行绑定;二是和fla文件绑定;三是使用import关键字导 入类。 • ActionScript3.0开发的程序,推荐文档与代码分离,不推 荐把代码写在关键帧上。下面用两种方法来开始第一个 “Welcome You”程序。 • 1.在关键帧上加入代码 • 2.利用文档类制造第一个“Welcome You”程序 第2章 AS3.0编程语言基础 • 语法、数据、变量、运算符和语句构成了编程语 言的基础。本章将通过大量的测试代码。详细的 介绍ActionScript 3.0中的语法、数据类型,变 量以及运算符。通过本章的学习,为以后的面向 对象编程将打下一个坚实的基础。 2.1 AS3.0语法 • 任何一门编程语言在编写代码时都必须遵循一定 的规则,这个规则就是语法。本节将着重介绍从 ActionScript 2.0开始使用的点语法和区分大小 写,了解编程常用的标点符号的使用,以及程序 注释的使用方法。 2.1.1 点语法 • Flash中使用点(.)运算符来访问对象的属性和 方法,点运算符主要用于下面的几个方面。 • 1.可以采用对象后面跟点运算符的属性名称(方 法)名称来引用对象的属性(方法)。 • 2.可以采用点运算符表示包路径。 • 3.可以使用点运算符描述显示对象的路径。 2.1.2 标点符号使用 • 在Flash中有多种标点符号都很常用,分别为:分号(;)、逗号(,)、冒号(:)、 小括号(())、中括号([])和大括号({})。这些标点符号在Flash中都有各自不 同的作用,可以帮助定义数据类型,终止语句或者构建ActionScript代码块。 • 1.分号(;):ActionScript语句用分号(;)字符表示语句结束。 • 2.逗号(,):逗号的作用主要用于分割参数,比如函数的参数,方法的参数等等。 • 3.冒号(:):冒号的作用主要用于为变量指定数据类型。要为一个变量指明数据类 型,需要使用var关键字和后冒号法为其指定。 • 4.小括号(()):小括号在ActionScript3.0中有三种用途。 • 首先,在数学运算方面,可以用来改变表达式的运算顺序。小括号内的数学表达式优 先运算。 • 其次,在表达式运算方面,可以结合使用小括号和逗号运算符,来优先计算一系列表 达式的结果并返回最后一个表达式的结果。 •5.中括号([]):中括号主要用于数组的定义和访问, •6.大括号({}):大括号主要用于编程语言程序控制,函数和类中。 • 在构成控制结构的每个语句前后添加大括号(例如if..else 或for),即使该控制结 构只包含一个语句。 2.1.3 注释 • 注释是使用一些简单易懂的语言对代码进行简单 的解释的方法。注释语句在编译过程中并不会进 行求值运算。可以用注释来描述代码的作用,或 者返回到文档中的数据。注释也可以帮助记忆编 程的原理,并有助于其他人的阅读。若代码中有 些内容阅读起来含义大不明显,应该对其添加注 释。 • ActionScript3.0中的注释语句有两种:单行注释 和多行注释。 • 单行注释以两个单斜杠(//)开始,之后的该行 内容均为注释。比如下面的代码: • trace("1234")//输出:1234 2.1.4 关键字和保留字 • 保留字,从字面上就很容易知道这是保留给 ActionScript 3.0语言使用的英文单词。因而不 能使用这些单词作为变量、实例、类名称等。如 果在代码中使用了这些单词,编译器会报错。 • ActionScript3.0中的保留字分为3类:词汇关键 字、语法关键字和供将来使用的保留字。 • 1.词汇关键字 • 2.句法关键字 • 3.供将来使用的保留字。 2.2 变量和常量 • 变量和常量,都是为了储存数据而创建的。变量 和常量就像是一个容器,用于容纳各种不同类型 的数据。当然对变量进行操作,变量的数据就会 发生改变,而常量则不会。 • 变量必须要先声明后使用,否则编译器就会报 错。道理很简单,比如现在要去喝水,那么你首 先要有一个杯子,否则怎么样去装水呢?要声明 变量的原因与此相同。 2.2.1 声明变量的语法 • 在ActionScript 3.0中,使用var关键字来声明变 量。格式如下所示。 • var 变量名:数据类型; • var 变量名:数据类型=值; • 变量名加冒号加数据类型就是声明的变量的基本 格式。要声明一个初始值,需要加上一个等号并 在其后输入响应的值。但值的类型必须要和前面 的数据类型一致。 2.2.2 变量的命名规则 • 变量的命名既是任意的,又是有规则,有目的的。随手牵 来、杂乱无章的命名在Flash里面容易引起代码的混乱,也 不容易进行维护操作。 • 变量的命名首先要遵循下面的几条原则: • 它必须是一个标识符。它的第一个字符必须是字母、下划 线(_)或美元记号($)。其后的字符必须是字母、数 字、下划线或美元记号。注意:不能使用数字作为变量名 称的第一个字母。 • 它不能是关键字或动作脚本文本,例如true、false、null 或undefined。特别不能使用ActionScript的保留字,否则 编译器会报错。 • 它在其范围内必须是惟一的,不能重复定义变量。 2.2.3 变量的作用域 • 变量的作用域指可以使用或者引用该变量的范围,通常变 量按照其作用域的不同可以分为全局变量和局部变量。全 局变量指在函数或者类之外定义的变量,而在类或者函数 之内定义的变量为局部变量。 • 全局变量在代码的任何地方都可以访问,所以在函数之外 声明的变量同样可以访问,如下面的代码,函数Test()外 声明的变量i在函数体内同样可以访问。 • var i:int=1; • //定义Test函数 • function Test() { • trace(i); •} • Test()//输出:1 2.2.4 变量的默认值 • 变量的默认值是指变量在没有赋值之前的值。对于 ActionScript3.0的数据类型来说,都有各自的默认值,下 面使用代码来测试一下: • 通过上面的代码输出,已经可以得到这些数据类型变量的 默认值,分别为: • Boolean型变量的默认值是:false。 • int型变量的默认值是:0。 • Number型变量的默认值是:NaN。 • Object型变量的默认值是:null。 • String型变量的默认值是:null。 • uint型变量的默认值是:0。 • *型变量的默认值是:undefined。 2.2.5 使用const声明常量 • Action Script 3.0中增加了一个const关键字, 用于声明常量。常量是指具有无法改变的固定值 的属性。比如Math.PI就是一个常量。常量可以看 做一种特殊的变量,不过这种变量不能赋值,不 能更改而已。 • 使用用const声明常量的语法格式和var声明的变 量的格式一样: • const 常量名:数据类型; • const 常量名:数据类型=值; • 下面声明常量的代码: • const g:Number=9.8; 2.3 基础数据类型 • 和其它的面向对象的编程的数据类型一样,ActionScript3.0的数 据类型同样分为两种,具体划分方式如下所示。 • 基元型数据类型:Boolean、int、Number、String和uint。 • 复杂型数据类型:Array、Date、Error、Function、RegExp、XML 和XMLList。 • 一般来说,基元值的处理速度通常比复杂值的处理速度要快。 • 基元型数据和复杂型数据类型的最大的区别是:基元型是值对类 型数据,而复杂型是引用类型数据。值对类型直接储存数据,使 用它为另一个的变量赋值之后,若另一个变量改变,并不影响原 变量的值。引用类型指向要操作的对象,另一个变量引用这个变 量之后,若另一变量发生改变,原有的变量跟着也要发生改变。 • 基元型数据类型都是值对类型数据,复杂型数据都是引用类型数 据。 • 另外,最明显的一个区别是,如果数据类型能够使用new关键字创 建,那么它一定是引用型数据变量。 2.3.1 基础数据类型说明 • 本节通过大量的测试代码,来说明各种不同的数 据类型的用法和使用中的注意事项。 • 1.Boolean 数据类型 • 2.数字:int、uint和Number • 3.String 数据类型 • 4.Array数组类型 • 5.Object数据类型 • 6.Object数据类型 2.3.2 数据类型检查 • 任何编程代码在执行前或者执行时都要执行数据类型的检 查,以避免出现数据错误。ActionScript 3.0是动态类型 的语言,它默认的是执行时进行数据类型检查。同时它也 在适合使用“严格模式”的编译器在编译时执行数据类型 检查。在使用严格模式的编译器中,数据类型检查既可以 在执行前执行编译器检查,也可以在运行时执行运行时检 查。在标准模式下,只支持默认的执行时数据类型检查。 • 比如说在程序编写过程中,要明确传递变量值的类型和接 受参数类型相同。比如下面的代码: • function func(mystr:String) { • trace(mystr); •} • var str:String="welcome you"; • func(str); 2.3.3 隐式数据类型转换 • 数据类型转换是指把某个值转换为其它类型的数据。类型 的转换有两种方式:隐式转换和显式转换。隐式转换又称 为强制转换,由Flash Player在运行时执行。比如将2赋值 给Boolean数据类型的变量,则Flash Player会先将2转换 为布尔值true,然后再将其赋值给该变量。 • 隐式转换可以称为自动转换,是在程序编译的过程中由程 序本身来进行数据类型的转换。它主要发生在许多上下文 中。主要分为以下几种情况: • 在赋值语句中。 • 在将值作为函数的参数传递时。 • 在从函数中返回值时。 • 在使用某些运算符(如加法运算符(+))的表达式中。 2.3.4 显式数据类型转换 • 显式转换是指代码若指示编译器将一个数据类型 的变量视为属于另一个类型的变量时执行该转 换。该转换主要利用数据类型的对象名称来转 换。常用的数据转换均为此方式。 • 显示转换是利用数据类型的对象名称来转换,常 见的主要有下面的几种。 • 1.转换为 int、uint 和 Number • 2.转换为Boolean • 3.转换为 String 2.3.5 无类型说明符 • ActionScript 3.0引入了三种特殊类型的无类型说明符: *,void和null。 • 使用*类型用于指定属性是无类型的。使用*作为类型注释 与不使用类型注释等效。从无类型属性中读取的表达式可 视为无类型表达式。该说明符主要用于两个方面:将数据 类型检查延缓到运行时和将undefined存储在属性中。 • void用于说明定函数无法返回任何值。void类型只有一个 值:undefined。该说明符仅用于声明函数的返回类型。 • null是一个没有值的特殊数据类型。Null数据类型只有一 个值:null。Null数据类型的不与任何类相关联。不可将 Null数据类型用作属性的类型注释。 2.4 运算符与表达式 • 学习一门编程语言,首先要弄清楚的就是如何对 其中的数据进行运算。使用表达式来表达想要达 到的效果,使用运算符来进行相关的运算,这就 是数据运算的关键。本节主要介绍常用的运算符 的用法。 2.4.1 运算符和表达式基础知识 • 运算符是可以通过给出的一个或者多个值来产生 另一个值的东西。可以说它是一种特殊的函数。 其中的值称为“操作数”,具体包括字面值、变 量和表达式。 • 运算符分为三种:一元运算符、二元运算符、三 元运算符。一元运算符只运算一个值,例如递增 运算符++;二元运算符比较常见,ActionScript 3.0中大部分运算符都是二元运算符;三元运算符 具有三个操作数,例如条件运算符(?:)具有3个 操作数。 2.4.2 赋值运算符 • 赋值运算符有两个操作数,它根据一个操作数的 值对另一个操作数进行赋值操作。ActionScript 中的赋值运算有12个, 赋值运算符 运算符 执行的运算 = 赋值 *= 乘法赋值 /= 除法赋值 %= 求模赋值 += 加法赋值 -= 减法赋值 <<= 按位向左移位赋值 >>= 按位向右移位赋值 >>>= 按位无符号向右移位赋值 &= 按位"与"赋值 ^= 按位"异或"赋值 |= 按位"或"赋值 2.4.3 算术运算符 • 算术运算符共有6个,分别为:加、减、乘、除、 模运算和求反运算。 • 加、减、乘、除的运算很简单,请看下面的代码 示例: • var a:int=1; • var b:int=2; • var c:int=a+b; • var d:int=a-b; • var e:int=a*b; • var f:int=a/b; 2.4.4 算术赋值运算符 • 算术赋值运算符和算术运算符对应,共有5个,分 别为+=、-=、*=、/=和%=。和赋值运算符一样, 运算符的左边只能是变量。右侧是一个要值、变 量或表达式。 • 这种类型的赋值运算符有时也叫做自赋值运算 符,就是利用自己进行运算并赋值给自己。比如 下面的代码语句: • a+=1; • 其要表达的运算过程就是下面的的代码要执行的 运算过程。 • a=a+1; 2.4.5 关系运算符 • 关系运算符用于比较两个操作数的值的大小关系。常见的 关系运算符一般分为两类:一类用于判断大小关系,一类 用于判断相等关系。其具体情况如下: • 判断大小关系:>大于运算符、<小于运算符、>=大于等于 运算符、<=小于等于运算符。 • 判断相等关系:==等于运算符、!=不等于运算符、===严 格等于运算符、!==严格不等于运算符。 • 关系运算符左右两侧可以是数值、变量或者表达式。关系 表达式的结果是Boolean值,flase或者true。 • 1.判断大小关系的运算符 • 2.判断相等关系的运算符: 2.4.6 逻辑运算符 • 逻辑运算符有3个,分别为:&&逻辑“与”运算 符、||逻辑“或”运算符和!逻辑“非”运算符。 逻辑运算符常用于逻辑运算,运算的结果为 Boolean型。 • 逻辑与(&&)和逻辑或(||)运算表达式要求左 右两侧的表达式或者变量必须是Boolean型的值。 • &&:左右两侧有一个为flase,结果都为flase; 只有两侧都为true,结果才为true。 • ||:左右两侧有一个为true,结果都为true;只 有两侧都为false,结果才为false。 2.4.7 按位和按位赋值运算符 • 按位运算符共有6个,分别为:&按位“与”、^按位“异或”、| 按位“或”、<<按位左移位、>>按位右移位、>>>按位无符号移 位。同样,按位赋值运算符也有6个,对照按位运算符分别为:&= 按位“与”赋值、^=按位“异或”赋值、|=按位“或”赋值、<<= 按位左移位赋值、>>=按位右移位赋值、>>>=按位无符号移位赋 值。 • 按位操作需要把十进制的整数,转换为二进制的数,然后进行操 作。 • 按位与操作过程:按位与操作的规则为:1+1=1,1+0=0,0+1=0, 0+0=0。比如11&34,11转二进制数为001011,34转二进制数为 100010。现在按照位置从右向左第一位分别为1和0,所以取与后 仍为0,依次取与的最后结果为000010。000010转为十进制数为 2,所以最后的输出结果为2。代码如下所示。 • var a:int=11; • var b:int=34; • trace(a&b);//输出为:2 2.4.8 递加递减运算符 • ++递加运算符和—递减运算符常用于循环计算过 程中,对循环中的变量进行递加或者递减操作。 比如i++,它等价于i=i+1。测试代码如下: • var i:int=0 • i++ • trace(i)//输出:1 • 同样,i—等价于i=i-1。测试代码如下: • var i:int=5; • i--; • trace(i);//输出:4 2.4.9 三元条件运算符 • ?:运算符是唯一的一个三元运算符,也就是说, 这个运算符有三个操作数。具体的语法格式如 下: • (条件表达式)?(表达式1):(表达式2) • 格式说明如下: • 条件表达式:判断表达式,通过逻辑判断,得到 一个Boolean型的结果。 • 表达式1:判断表达式的结果为true,执行该语 句。 • 表达式2:判断表达式的结果为false,执行该语 句。 2.4.10 其它运算符 • 在ActionScript3.0中还有几个常见的运算符,如: typeof、is、as。下面对这几个运算符进行简单的说明: • 1.typeof运算符:typeof用于测试对象的的类型,使用的 方法如下: • typeof(对象); • 2.is运算符:is运算符用于判断一个对象是不是属于一种 数据类型,返回Boolean型变量。如果对象属于同一类型, 则返回true,否则返回false。 • 3.as运算符:as运算符和is运算符的使用格式相同,但是 返回的值不同。如果对象的类型相同,返回对象的值;若 不同,则返回null。 2.4.11 运算符的优先级 • 运算符的优先级顺序决定了一个表达式运算顺序。就像数学中的乘除运算要优于加减 运算一样,ActionScript 3.0 中的各运算符之间也有一个优先运算的顺序。具体请 参照表所示。 运算符优先顺序表 组 运算符 主要 [] {x:y} () f(x) new x.y x[y] <> @ :: .. 后缀 x++ x-- 一元 ++x --x + - ~ ! delete typeof void 乘法 * / % 加法 + - 按位移位 << >> >>> 关系 < > <= >= as in instanceof is 等于 == != === !== 按位"与" & 按位"异或" ^ 按位"或" | 逻辑"与" && 逻辑"或" || 条件 ?: 赋值 = *= /= %= += -= <<= >>= >>>= &= ^= |= 逗号 , 第3章 AS3.0程序设计 • 任何一门编程语言都要设计程序问题, ActionScript 3.0也不例外。在本章中,将介绍 ActionScript3.0系统的基本语句以及程序设计的 一般过程。首先介绍一下程序控制的逻辑运算, 然后着重介绍条件语句和循环语句。 3.1 逻辑运算 • 在程序设计的过程中,要实现程序设计的目的,必须进行逻辑运算。只有 进行逻辑运算,才能控制程序不断向最终要达到的目的前进,知道最后实 现目标。 • 逻辑运算又称为布尔运算,通常用来测试真假值。逻辑运算主要使用条件 表达式进行判断,如果符合条件,则返回结果true,不符合条件,返回结 果false。 • 条件表达式中最常见的形式就是利 用关系运算符进行操作数比较,进而 得到判断条件。 • 当然,有的情况下需要控制的条件比较多,那么就需要使用逻辑表达式进 行逻辑运算,得到一个的组合条件,并控制最后的输出结果。 • 常见的条件表达式举例如下: • (a>0):表示判断条件为a>0。若是,返回true;否则返回false。 • (a==b)&&(a>0):表示判断条件为a大于0,并且a与b相等。若是,返 回true,否则返回false。 • (a==b)||(a>0):表示判断条件为a大于0,或者a与b相等。若是,返 回true,否则返回false。 3.2 程序的三种结构 • 在程序设计的过程中,如果控制程序,如何安排 每句代码执行的先后次序,这个先后执行的次 序,称之为“结构”。常见的程序结构有三种: 顺序结构、选择结构和循环结构。本节将逐个介 绍一下这三种程序结构的概念和流程。 3.2.1 顺序结构 • 顺序结构最简单,就是按照代码的顺序,一句一 句的执行操作,结构如图3-1所示。 • ActionScript代码中的简单语句都是按照顺序进 行处理,这就是顺序结构。请看下面的示例代 码。 • //执行的第一句代码,初始化一个变量 • var a:int; • //执行第二句代码,给变量a赋值数值1 • a=1; • //执行第三句代码,变量a执行递加操作 • a++; 3.2.2 选择结构 • 当程序有多种可能的选择时,就要使用选择结 构。选择那一个,要根据条件表达式的计算结果 而定。结构如图所示。 3.2.3 循环结构 • 循环结构就是多次执行同一组代码,重复的次数 由一个数值或条件来决定。结构如图所示。 3.3 选择程序结构 • 选择程序结构就是利用不同的条件去执行不同的 语句或者代码。ActionScript 3.0有三个可用来 控制程序流的基本条件语句。其分别为if..else 条件语句、if..else if条件语句、switch条件语 句。本节将详细讲解这三种不同的选择程序结 构。 3.3.1 if..else 条件语句 • if..else条件语句判断一个控制条件,如果该条 件能够成立,则执行一个代码块,否则执行另一 个代码块。 • if..else条件语句基本格式如下: • if(表达式){ • 语句1 •} • else •{ • 语句2; •} 3.3.2 if..else if..else语句 • if..else条件语句执行的操作最多只有两种选 择,要是有更多的选择,那就可以使用if..else if..else条件语句。 3.3.3 Switch语句 • Switch语句相等于一系列的if..else if..语句,但是要比if语句 要清晰的多。switch 语句不是对条件进行测试以获得布尔值,而 是对表达式进行求值并使用计算结果来确定要执行的代码块。 • Switch语句格式如下: • switch (表达式) { • case: • 程序语句1; • break; • case: • 程序语句2; • break; • case: • 程序语句3; • break; • default: • 默认执行程序语句; •} 3.4 循环程序结构 • 在现实生活中有很多规律性的操作,作为程序来说就是要 重复执行某些代码。其中重复执行的代码称为循环体,能 否重复操作,取决于循环的控制条件。循环语句可以认为 是由循环体和控制条件两部分组成。 • 循环程序结构的结构一般认为有两种: • 一种先进行条件判断,若条件成立,执行循环体代码,执 行完之后再进行条件判断,条件成立继续,否则退出循 环。若第一次条件就不满足,则一次也不执行,直接退 出。 • 另一种是先执行依次操作,不管条件,执行完成之后进行 条件判断,若条件成立,循环继续,否则退出循环。 3.4.1 for循环语句 • for循环语句是ActionScript编程语言中最灵活、应用最为广泛的 语句。for循环语句语法格式如下: • for(初始化;循环条件;步进语句) { • 循环执行的语句; •} • 格式说明如下: • 初始化:把程序循环体中需要使用的变量进行初始化。注意要使 用var关键字来定义变量,否则编译时会报错。 • 循环条件:逻辑运算表达式,运算的结果决定循环的进程。若为 flase,退出循环,否则继续执行循环代码。 • 步进语句:算术表达式,用于改变循环变量的值。通常为使用++ (递增)或--(递减)运算符的赋值表达式。 • 循环执行的语句:循环体,通过不断改变变量的值,已达到需要 实现的目标。 3.4.2 while循环语句 • while循环语句是典型的“当型循环”语句,意思是当满足 条件时,执行循环体的内容。while循环语句语法格式如 下: • while(循环条件) { • 循环执行的语句 •} • 格式说明如下: • 循环条件:逻辑运算表达式,运算的结果决定循环的进 程。若为true,继续执行循环代码,否则退出循环。 • 循环执行的语句:循环体,其中包括变量改变赋值表达 式,执行语句并实现变量赋值。 3.4.3 do..while循环语句 • do…while循环是另一一种while循环,它保证至 少执行一次循环代码,这是因为其是在执行代码 块后才会检查循环条件。do…while循环语句语法 格式如下: • do { • 循环执行的语句 • } while (循环条件) • 循环执行的语句:循环体,其中包括变量改变赋 值表达式,执行语句并实现变量赋值。 • 循环条件:逻辑运算表达式,运算的结果决定循 环的进程。若为true,继续执行循环代码,否则 退出循环。 3.4.4 for..in和for each..in语句 • for..in和for each..in语句都可以用于循环访问对象属性 或数组元素。下面分别使用两种语句来访问对象中的属 性。代码如下所示。 • //定义一个对象lzxt,并添加属性name和age • var lzxt:Object = {name:"浪子啸天", age:30}; • //执行遍历操作 • for (var i:String in lzxt) { • //输出属性名称和属性值 • trace("for in 语句输出:"+i + ": " + lzxt[i]); •} • //执行for each遍历操作 • for each (var k:String in lzxt) { • //输出属性值 • trace("for each 语句输出:"+k); •} 3.4.5 循环的嵌套 • 嵌套循环语句,就是在一个循环的循环体中存在 另一个循环体,如此重复下去直到循环结束为 止,即为循环中的循环。以for循环为例,格式如 下所示。 • for (初始化; 循环条件; 步进语句) { • for (初始化; 循环条件; 步进语句) { • 循环执行的语句; •} •} 3.4.6 循环流程控制语句 • 在ActionScript 3.0中可以使用break和continue来控制循 环流程。break语句的结果是直接跳出循环,不再执行后面 的语句;continue语句的结果是停止当前这一轮的循环, 直接跳到下一轮的循环,而当前轮次中continue后面的语 句也不再执行。 • 下面的两个例子分别执行循环变量从0递增到10的过程,如 果i等于4,分别执行break和continue语句,看发生的情 况。代码如下所示。 • //使用break控制循环 • for (var i:int=0; i<10; i++) { • if (i==3) { • break; •} • trace("当前数字是:"+i); •} 第4章 函数 • 函数在程序设计的过程中,是一个革命性的创 新。利用函数编程,可以避免冗长、杂乱的代 码;利用函数编程,可以重复利用代码,提高程 序效率;利用函数编程,可以便利的修改程序, 提高编程效率。 • 函数(Function)的准确的定义为:执行特定任 务,并可以在程序中重用的代码块。 ActionScript 3.0中有两类函数:“方法”和 “函数闭包”。具体是将函数称为方法还是函数 闭包,取决于定义函数的上下文。 4.1 定义函数 • 在ActionScript 3.0中有两种定义函数的方法: 一种是常用的函数语句定义法;一种是 ActionScript中独有的函数表达式定义法。具体 使用哪一种方法来定义,要根据编程习惯来选 择。一般的编程人员使用函数语句定义法,对于 有特殊需求的编程人员,则使用函数表达式定义 法。 4.1.1 函数语句定义法 • 函数语句定义法是程序语言中基本类似的定义方法,使用function关键字 来定义,其格式如下所示。 • function 函数名(参数1:参数类型,参数2:参数类型…):返回类型{ •//函数体 •} • 代码格式说明: • function:定义函数使用的关键字。注意function关键字要以小写字母开 头。 • 函数名:定义函数的名称。函数名要符合变量命名的规则,最好给函数取 一个与其功能一致的名字。 • 小括号:定义函数的必需的格式,小括号内的参数和参数类型都可选。 • 返回类型:定义函数的返回类型,也是可选的,要设置返回类型,冒号和 返回类型必须成对出现,而且返回类型必须是存在的类型。 • 大括号:定义函数的必需格式,需要成对出现。括起来的是函数定义的程 序内容,是调用函数时执行的代码。 4.1.2 函数表达式定义法 • 函数表达式定义法有时也称为函数字面值或匿名函数。这是一种较为繁杂 的方法,在早期的ActionScript版本中广为使用。其格式如下所示。 • var 函数名:Function=function(参数1:参数类型,参数2:参数类型…):返 回类型{ •//函数体 •} • 代码格式说明: • var:定义函数名的关键字,var关键字要以小写字母开头。 • 函数名:定义的函数名称。 • Function:指示定义数据类型是Function类。注意Function为数据类型, 需大写字母开头。 • =:赋值运算符,把匿名函数赋值给定义的函数名。 • function:定义函数的关键字,指明定义的是函数 • 小括号:定义函数的必需的格式,小括号内的参数和参数类型都可选。 • 返回类型:定义函数的返回类型,可选参数。 • 大括号:其中为函数要执行的代码。 4.1.3 两种定义方法的区别和选择 • 原则上,推荐使用使用函数语句定义法。因为这种方法更 加简洁,更有助于保持严格模式和标准模式的一致性的。 • 下面要讲解的是函数语句和函数表达式定义法之间存在的 区别,具体内容如下所示。 • 1.两种方法区别 • 2.两种方法的选择 • 在两种定义方法的选择上,一般使用函数语句定义法。函 数表达式定义函数主要用于:一是适合关注运行时行为或 动态行为的编程,二是用于那些使用一次后便丢弃的函数 或者向原型属性附加的函数。函数表达式更多地用在动态 编程或标准模式编程中。 4.2 调用函数 • 函数只是一个编好的程序块,在没有被调用之 前,什么也不会发生。只有通过调用函数,函数 的功能才能够实现,才能体现出函数的高效率。 通过本节的学习,读者将掌握一般的函数调用方 法以及嵌套和递归调用函数的方法。 4.2.1 函数的一般调用 • 对于没有参数的函数,可以直接使用该函数的名 字,并后跟一个圆括号(它被称为“函数调用运算 符”)来调用。 • 下面定义一个不带参数的函数HelloAS(),并在定 义之后直接调用,其代码如下。 • function HelloAS() { • trace("AS3.0世界欢迎你!"); •} • HelloAS(); • 代码运行后的输出结果,如下所示。 • /输出:AS3.0世界欢迎你! 4.2.2 嵌套和递归调用函数 • 嵌套和递归调用是两种类似函数调用方式,其本 质都是在调用函数时用一个函数就调用另一个函 数。不同的是,嵌套调用是用一个函数去调用另 一个函数,而递归调用是函数调用自身函数。 • 1.嵌套调用函数 • 2.递归调用函数 4.3 函数的返回值 • 主调函数通过函数的调用得到一个确定的值,此 值被称为函数的返回值。利用函数的返回值,可 以通过函数进行数据的处理、分析和转换,并能 最终获取想要获得的结果。在本节我们主要学习 函数返回值的获取方法和获取过程中的注意事 项。 4.3.1 return语句 • AS从函数中获取返回值,使用return语句来实现,语法格 式如下: • return 返回值 • return:函数返回值的关键字,必须的。 • 返回值:函数中返回的数据,既可以是字符串、数值等, 也可以是对象,如数组、影片简介等。 • 下面定义一个求圆形面积的函数,并返回圆面积的值,其 代码如下: • function 圆面积(r:Number):Number{ • var s:Number=Math.PI*r*r • return s •} • trace(圆面积(5)) 4.3.2 返回值类型 • 函数的返回类型在函数的定义中属于可选参数,如果没有 选择,那么返回值的类型由return语句中返回值的数据类 型来决定。 • 下面的代码,return语句返回一个字符型数据,来验证一 下返回值的类型。 • function 类型测试() { • var a:String="这是一个字符串"; • return a; •} • trace(typeof(类型测试())); • 代码运行后的输出结果,如下所示。 • string 4.4 函数的参数 • 函数通过参数向函数体传递数据和信息。 ActionScript 3.0对函数的参数增加了一些新功 能,同时也增加了一些限制。有大多数程序员都 熟悉的按值或按引用传递参数这一概念,也有对 很多人很陌生的arguments对象和...(rest)参 数。 4.4.1 传递参数的语法 • 函数中传递的参数都位于函数格式的括号中,语法格式如 下: • (参数1:参数类型=默认值,参数2:参数类型=默认值) • 下面定义一个个性化的欢迎语句,对不同的姓名给出对应 的问候。代码如下所示。 • function Welcome(username:String):void { • trace("欢迎你!"+username); •} • Welcome("张三"); • Welcome("小明"); • 代码运行后的输出结果,如下所示。 • 欢迎你!张三 • 欢迎你!小明 4.4.2 传递参数的的两种方法 • 许多编程语言中,参数的传递基本都是两种类型:按值或 者按引用传递。按值传递意味着将参数的值复制到局部变 量中以便在函数内使用。按引用传递意味着将只传递对参 数的引用,而不传递实际值。要了解任何一门编程语言中 的函数,首先必须搞清楚的问题就是参数的传递到底是按 值还是按引用来传递参数。 • 在ActionScript 3.0 中,所有的参数均按引用传递,因为 所有的值都存储为对象。基元型数据是不变的对象,按按 值还是按引用的效果一样,通常可以看作是按值传递。按 值传递,就是指参数被传递给函数后,被传递的变量就独 立了。若在函数中改变这个变量,原变量不会发生任何的 变化。 4.4.3 给函数设置默认参数 • 在ActionScript 2.0中并不支持对函数设置默认 参数,此为ActionScript 3.0的新功能。要给一 个函数的参数设置默认值,语法格式如下: • function(参数1:参数类型=默认值,参数2:参数类 型=默认值) • 默认参数是可选项,可以设置默认参数,也可以 不设置默认参数。若设置了默认参数,则在调用 函时,若果没有写明参数,系统将使用在函数定 义中为该参数指定的值。 4.4.4 arguments 对象和...(rest) 参数 • ActionScript3.0中有两种函数调用时检查参数数量的方 法,分别为使用arguments对象和..(rest) 参数。 • 1.arguments 对象 • 在函数中,可以使用arguments 对象来访问有关传递给该 函数的参数的信息。arguments 对象是一个数组,其中按 顺序保存着传递给函数的所有参数。可以使用数组的访问 方式来访问传入的参数。它有一个length属性记录当前传 入的参数数目;还有一个属性callee提供对函数本身的引 用,该引用可用于递归调用函数表达式。 •2....(rest)参数 • ...(rest)参数是ActionScript3.0引入的新参数声明。使 用该参数可指定一个自己命名的数组参数来接受任意多个 以逗号分隔的参数。 第5章 事件的发送和处理 • 事件处理系统是交互式程序设计的重要基础。利 用事件处理机制,可以方便的相应用户输入和系 统事件。ActionScript 3.0的事件机制基于文档 对象模型(DOM3),是业界标准的事件处理体系 结构。使用机制不仅方便,而且符合标准。 ActionScript 3.0全新的事件处理机制是 ActionScript编程语言中的重大改进,对 ActionScript程序设计人员来说,在使用上也更 加的方便和直观。 5.1 事件处理基础 • 在本节将介绍事件和处理的基本概念,了解常见 的事件处理任务。对照ActionScript编程语言中 不同版本的事件处理机制的异同,明确 ActionScript 3.0中事件处理机制具有良好的性 能。 5.1.1 事件和事件处理基础知识 • 事件和事件处理是面向对象编程的基础。本节将介绍事件 和事件处理的基础知识以及事件处理的方法和事件处理的 任务。 • 1.事件和事件处理基本概念 • 2.ActionScript 3.0中的事件和事件处理 • 3.ActionScript 3.0中的事件处理任务 • 在ActionScript 3.0编程过程中,常见的使用事件处理的 任务有: • 编写代码以响应事件 • 阻止代码响应事件 • 处理事件对象 • 处理事件流 • 从类中调度事件 • 创建自定义事件类型 5.1.2 早期 ActionScript 版本中的事件处理 • ActionScript 1.0使用on()和onClipEvent()两个事件处理 函数来处理事件。具体为: • on()事件处理函数,直接放在按钮或者影片剪辑实例上。 • onClipEvent()处理函数,直接放在影片剪辑实例上。 • 这种方法把代码直接夹在实例上,简单易于、方便直接, 但是由于分散在各个不同的元件之上,难以管理和维护。 特别是处理不是本人编写的代码,查看和找寻会浪费太多 的宝贵时间。 • 在ActionScript2.0中对事件处理进行了改进,增加了一些 事件处理机制,具体为: • 回调函数事件:onload、oninit、onComplete等。 • 事件侦听器:addListener()、addEventListener()。 5.1.3 ActionScript 3.0中的事件处理 • 在ActionScript 3.0引入了基于文档对象模型(DOM3)唯 一的一种事件处理模式,取代了以前各版本中存在的众多 的事件处理机制。在ActionScript3.0中值存在一种事件处 理模型,虽然会对一些老版本的用户和一些非开发者造成 一定的麻烦,但更加清晰,更加标准,更符合面向对象开 发的需要。 • 对比ActionScript 2.0,ActionScript 3.0的事件处理体 系具有以下几个新特点: • 在ActionScript 3.0中,只能使用addEventListener()注 册侦听器。 • 在ActionScript 3.0中,可以对属于事件流一部分的任何 对象调用addEventListener()方法。 • 在ActionScript 3.0中,只有函数或方法可以是事件侦听 器。 5.2 Event类 • 在ActionScript 3.0的事件处理系统中,事件对 象主要有两个作用:一是将事件信息储存在一组 属性中,来代表具体事件;二是包含一组方法, 用于操作事件对象和影响事件处理系统的行为。 • 在ActionScript 3.0中,在Flash播放器的应用程 序接口中,有一个Event类,作为所有事件对象的 基类,也就是说,程序中所发生的事件都必须是 Event类或者其子类的实例。 5.2.1 了解Event类属性 • Event类公开的属性有:type、cancelable、target、 currentTarget、eventphase、bubles。 • 1.type属性:每个事件对象都有关联的事件类型。事件类 型存储以字符串的形式存储在Event.type属性中。利用事 件类型,可以区分不同类型的事件。 • 2.cancelable属性:事件的默认行为是否可以被阻止由布 尔值表示,并存储在Event.cancelable属性中。此属性时 一个布尔值,默认为flase。这个属性一般是和 preventDefault()方法结合在一起使用的。 • 3.target属性:target属性用于存储对事件目标的引用。 • 4.其它属性:currentTarget、eventphase和bubbles这三 个属性都是和ActionScript3的事件流机制有关,在平时用 到的不多。 5.2.2 了解Event类的方法 • Event类的方法有7种:clone()、toString()、stopPropogation()、 stopImmediatePropogation()、preventDefault()、 isDefaultPrevented()和formatToString()。这些方法的用途如下: • Event.clone()方法用于赋值Event子类实例,返回Event对象原始实例的 副本。当需要自定义Event子类时,就必须要继承Event.clone()方法,用 于赋值自定义类的属性。另外还要加上新的属性,否则在侦听器重写调用 时,这些属性的值会出现错误。 • Event.toString()属性返回一个包含Event对象的所有属性的字符串。如 果要自定义事件类,那么重写toString()方法时,可以使用 formatToString()这个方法在返回的字符串中加入新的事件实例属性。 • Event.stopPropogation()方法可阻止事件对象移动到下一个节点,但只 有在允许执行当前节点上的任何其它事件侦听器之后才起作用。 • Event.stopImmediatePropogation()方法也阻止事件对象移动到下一个节 点,但不允许执行当前节点上的任何其它事件侦听器。 • Event.preventDefault()和Event.isDefaultPrevented()和 Event.cancelable属性结合使用,用于取消事件的默认行为的发生。 5.2.3 Event类的子类 • 对于很多事件来说,使用Event类的一组属性就已 经足够了。但是,Event类中的属性无法捕获其它 事件具有的独特的特性,比如鼠标的点击事件, 键盘的输入事件等。ActionScript 3.0的应用程 序接口特意为这些具有显特征的事件准备了Event 类的几个子类。这些子类主要包括: • 鼠标类:MouseEvent。 • 键盘类:KeyBoardEvent。 • 时间类:TimerEvent。 • 文本类:TextEvent。 5.3 事件侦听器 • 事件侦听器也就是以前版本中的事件处理函数, 是事件的处理者,负责接受事件携带的信息,并 在接受到该事件之后执行事件处理函数体内的代 码。 • 添加事件侦听的过程有两步:第一步是创建一个 事件侦听函数,第二步是使用addEventListener() 方法在事件目标或者任何的显示对象上注册侦听 器函数。 5.3.1 创建事件侦听器 • 事件侦听器必须是函数类型,可以是一个自定义 的函数,也可以是实例的一个方法。创建侦听器 的语法格式如下: • function 侦听器名称(evt:事件类型):void{…} • 语法格式说明如下: • 侦听器名称:要定义的事件侦听器的名称,命名 需符合变量命名规则。 • evt:事件侦听器参数,必需。 • 事件类型:Event类实例或其子类的实例。 • void:返回值必须为空,不可省略。 5.3.2 管理事件侦听器 • 在ActionScript3.0中使用IEventDispatcher接口的方法来 管理侦听器函数,主要用于注册、检查和删除事件侦听 器。 • 1.注册事件侦听器:addEventListener()函数用来注册事 件侦听函数。注册侦听器的语法格式如下: • 事件发送者.addEventListener(事件类型,侦听器); • 2.删除事件侦听器:removeEventListener()函数用来删除 事件侦听器函数。删除侦听器的语法格式如下: • 事件发送者.removeEventListener(事件类型,侦听器); • 3.检查事件侦听器:HasEventListener()方法和 willTragger()方法,都可以用来检测当前的事件发送者注 册了何种事件类型的侦听器。 • 检查事件侦听器语法格式如下: • 事件发送者.hasEventListener(事件类型); 5.4 事件处理类型 • ActionScript3.0使用单一事件模式来管理事件, 所有的事件都位于flash.events包内,其中构建 了20多个Event类的子类,用来管理相关的事件类 型。在本节介绍常用的鼠标事(MouseEvent)件 类型、键盘事件(KeyboardEvent)类型和事件事 件(TimerEvent)类型和帧循环(ENTER_FRAME) 事件。 5.4.1 鼠标事件 • 在ActionScript3.0之前的语言版本中,常常使用on(press)或者 onClipEvent(mousedown)等方法来处理鼠标事件。而在 ActionScript3.0中,统一使用MouseEvent类来管理鼠标事件。在 使用过程中,无论是按钮还是影片事件,统一使用 addEventListener注册鼠标事件。此外,若在类中定义鼠标事 件,则需要先引入(import)flash.events.MouseEvent类。 • MouseEvent类定义了10中常见的鼠标事件,具体如下: • CLICK:定义鼠标单击事件 DOUBLE_CLICK:定义鼠标双击双击事 件 • MOUSE_DOWN:定义鼠标按下事件 MOUSE_MOVE:定义鼠标移动事 件 • MOUSE_OUT:定义鼠标移出事件 MOUSE_OVER:定义鼠标移过事件 • MOUSE_UP:定义鼠标提起事件 MOUSE_WHEEL:定鼠标滚轴滚动触 发事件 • ROLL_OUT:定义鼠标滑入事件 ROLL_OVER:定义鼠标滑出事件 5.4.2 键盘事件 • 键盘操作也是Flash用户交互操作的重要事件。在 ActionScript 3.0中使用KeyboardEvent类来处理 键盘操作事件。它有两种类型的键盘事件: KeyboardEvent.KEY_DOWN 和 KeyboardEvent.KEY_UP。 • KeyboardEvent.KEY_DOWN:定义按下键盘时事件 • KeyboardEvent.KEY_UP:定义松开键盘时事件 • 注意:在使用键盘事件时,要先获得它的焦点, 如果不想指定焦点,可以直接把stage作为侦听的 目标。 5.4.3 时间事件 • 在ActionScript3.0中使用Timer类来取代 ActionScript之前版本中的setinterval()函数。 而执行对Timer类调用的事件进行管理的是 TimerEvent事件类。要注意的是,Timer类建立的 事件间隔要收到SWF文件的帧频和Flash Player的 工作环境(比如计算机的内存的大小)的影响, 会造成计算的不准确。 • Timer类有两个事件,分别为: • TimerEvent.TIMER:计时事件,按照设定的事件发 出。 • TimerEvent.TIMER_COMPLETE:计时结束事件,当 计时结束时发出 5.4.4 帧循环ENTER_FRAME事件 • 帧循环ENTER_FRAME事件是ActionScript 3.0中动 画编程的核心事件。该事件能够控制代码跟随 Flash的帧频播放,在每次刷新屏幕时改变显示对 象。 • 使用该事件时,需要把该事件代码写入事件侦听 函数中,然后在每次刷新屏幕时,都会调用Event. ENTER_FRAME事件,从而实现动画效果。 第6章 面向对象编程基础 • 面向对象的编程,其英文是“Object-Oriented Programming”,简写为OOP。它以对象为基本单元来进行 代码划分,组织程序代码。ActionScript3.0是一个完全标 准的面向对象编程语言。面向对象编程在Flash5已经开始 支持,可惜语法不是业界传统的编程语言格式,在Flash5 和Flash MX中编写面向对象的编程非常的不方便。 ActionScript2.0在面向对象的编程上有很大的进步,但是 由于其使用的并不完全符合标准,存在很多的问题。现在 ActionScript3.0的推出基本解决了ActionScript2.0中存 在的问题,并有了很多的改进,而且相对于其它的OOP语 言,其更简单易学。 6.1 面向对象编程技术概述 • 面向对象编程中最重要也最难以理解的概念就是“对 象”。对象,指的是具有某种特定功能的程序代码。 • 对象(Object)具体可以指一件事、一个实体、一个名 词,一个具有自己的特定标识的东西。比如汽车、人、房 子、桌子、植物、支票、雨衣等等都是对象。对象就是一 种客观存在,可能有时你觉得虚无飘渺,但是却的的确确 存在着。 • 任何一个对象都有其属性。以人为例,人有身高、体重、 性别、血型、年龄等等,这些都反映了人作为一个社会存 在所共有的特性。把这些特性反映到编程语言中,这些特 性就是属性,用来反映某一个对象的共有特点。 6.2 类 • 对象是抽象的概念,要想把抽象的对象变为具体 可用的实例,则必须使用类。使用类来存储对象 可保存的数据类型,及对象可表现的行为信息。 要在应用程序开发中使用对象,就必须要准备好 一个类,这个过程就好像制作好一个元件并把它 放在库中一样,随时可以拿出来使用。本节从类 的基本概念着手,逐步介绍类的定义方法和类的 使用方法。 6.2.1 类的概述 • 类(Class)就是一群对象所共有的特性和行为。 • 早在ActionScript1.0中,程序员使用原型(Prototype)扩展的 方法,来创建继承或者将自定义的属性和方法添加到对象中来, 这是类在Flash中的初步应用。在ActionScript 2.0中,通过使用 class和extends 等关键字,正式添加了对类的支持。 ActionScript 3.0不但继续支持ActionScript 2.0中引入的关键 字,而且还添加了一些新功能,如通过protected和internal属性 增强了访问控制,通过final和override关键字增强了对继承的控 制。 • 下面来简单了解一下ActionScript3.0中类(Class)的构成。具 体的类结构及实现方法,请参见6.2.2节的内容。 • 包块和类(Class)的名称。 • 构造函数。 • 属性:包括实例属性和静态属性。 • 方法:包括实例方法和静态方法。 6.2.2 创建自定义的类 • 创建一个自定义类的操作步骤如下: • (1)建立一个准备保存类文件的目录,即为一个包(package)。比如在 计算机中有个目录“F:\Test”。 • (2)启动Adobe Flash CS3,新建一个ActionScript文件,文件名为要创 建的类的名字。比如要创建的类的名称为Sample,那么保存的文件名称也 要为Sample。注意一定要保存在刚才建立的目录中。 • (3)在文件的开头写入package关键字和package包的路径。如:package Test{},其中Test就是保存类文件的目录名称。 • (4)若需要引入其它的类,则需要在package后面的大括号后插入新行, 使用import语句加入其它类的包路径和名称。比如import flash.geom.point。若不需要,则此步骤可以省略。 • (5)在新的一行写入class关键字和类的名字。如class Sample{}。 • (6)在class后面的大括号内写入对类定义的内容,包括构造函数,属性 和方法。 6.2.3 创建类的实例 • 类是为了使用而创建的,要使用创建好的类,必 须通过类的实例来访问。要创建类的实例,需要 执行下面的步骤: • (1)使用import关键字导入所需的类文件。其用 法格式如下所示。 • import 类路径.类名称; • (2)使用new关键字加上类的构造函数。其用法 格式如下: • var 类引用名称:类名称=new 类名称构造函数 (); 6.2.4 包块和类 • 在ActionScript 3.0中,包路径是一个独立的模 块,单独用一个包块来包含类,不再作为类定义 的一部分。定义包块使用package关键字,其用法 格式如下所示。 • package 包块路径{ • //类体 •} • 用法示例代码: • package com.lzxt.display{ • //类体 •} 6.2.5 包的导入 • 在ActionScript 3.0中,要使用某一个类文件,就需要先导入这个类文件 所在的包,也就是要先指明要使用的类所在的位置。 • 通过情况下,包的导入有这样的三种情形: • 1.明确知道要导入哪个包,直接导入单个的包 • 例如说要创建一个绘制对象,那么只需导入Display包中的Shape包即可。 代码如下所示。 • import flash.display.Shape; • 2.不知道具体要导入的类,使用通配符导入整个包 • 例如需要一个文本的控制类,但是并不知道该类的具体名称,那么就可以 使用“*”通配符进行匹配,一次导入包内的所有类。具体使用代码如下 所示。 • import flash.text.* • 3.要使用同一包内的类文件,则无需导入 • 如果现在有多个类位于计算机中的同一个目录下,则这些类在互相使用的 时候,不需要导入,直接使用即可。 6.2.6 构造函数 • 构造函数是一个特殊的函数,其创建的目的是为了在创建对象的 同时初始化对象,即为对象中的变量赋初始值。 • 在ActionScript 3.0编程中,创建的类可以定义构造函数,也可 以不定义构造函数。如果没有在类中定义构造函数,那么编译时 编译器会自动生成一个默认的构造函数,这个默认的构造函数为 空。构造函数可以有参数,通过参数传递实现初始化对象操作。 • 下面的示例列出两种常用的构造函数代码: • //空构造函数 • public function Sample(){ •} • //有参数的构造函数 • public function Sample(x:String){ • //初始化对象属性 •} 6.2.7 声明和访问类的属性 • 在编程语言中,使用属性来指明对象的特征和对象所包含的数据 信息以及信息的数据类型。在定义类的过程中,需要通过属性来 实现对象特征的描述和对象信息数据类型的说明。比如在创建一 个关于人的类的过程中,就需要说明人这一对象的“性别”特 征,需要说明人的“年龄”这一数据的数据类型是一个数字等 等。本节将介绍声明和访问类属性的方法。 • 在ActionScript 3.0的类体中,一般在class语句之后声明属性。 类的属性分两种情况:实例属性和静态属性。实例属性必须通过 创建该类的实例才能访问,而静态属性则不需要创建类实例就能 够访问。 • 声明实例属性的语法格式如下所示。 • var 属性名称:属性类型; • var 属性名称:属性类型=值; • public var 属性名称:属性类型=值; 6.2.8 声明和访问类的方法 • 在编程语言中,使用方法来构建对象的行为,即 用来表示对象可以完成的操作。在编程过程过程 中,通过对象的方法,告诉对象可以做什么事 情,怎么做。比如在创建一个关于人的类的过程 中,就需要知道人能够干什么事情,这就是人这 一对象的方法。比如人张口说话,举手等等行 为,都需要通过方法来表示。 • 在ActionScript 3.0中,声明类实例方法的格式 和上面函数的格式类似,格式如下所示。 • function 方法名称(参数…):返回类型{ • //方法内容 •} 6.2.9 类的使用 • 在ActionScript 3.0中,创建好的类一般有3种使 用方法:作为文档类进行文档类绑定;作为库中 元件的类进行绑定;作为外部类使用import关键 字导入。下面结合实例具体的来说一下这3种用 法。 • 1.文档类 • 文档类是ActionScript 3.0的新特色,该特色是 为实现代码与文档分离而设计的。 • 2.与库文件绑定 • 与fla文件库中的影片剪辑进行绑定,每个影片剪 辑只能绑定一个类。 • 3.import导入类 6.2.10 包外类 • 在ActionScript 3.0中,一个类文件中可以定义 多个类,但是包块内只能定义有一个类,此为主 类。主类的名称一定要和类文件的名称相同,这 个类是供外部使用的。在包块之外,还可以定义 多个类,这些类的名称和类文件的名称不同,而 且只能由当前类中的成员可以访问。这种类,有 些资料称其为包外类,有些资料称其为助手类。 在这里笔者使用包外类这一名称。 6.3 接口 • 接口可以看作是一个对象之间相互联系的纽带,起一个桥 梁的作用。通过接口中方法声明的集合,能够使互不相干 的对象之间相互通信。 • 接口和类存在着一些类似的地方,也由一定的区别。 • 接口仅仅声明方法而不提供实现的方法,要实现方法,需 要在该接口的类中声明和实现。 • 接口方法的实现无任何属性,但在接口类的定义中,实现 的方法必须为public。 • 可通过extends语句由接口继承实现多个接口,也可以通过 implements语句由类继承实现。 • 接口是一个定义类方法组的数据类型,可作为类型注释。 6.3.1 接口的定义 • 定义接口的方法和定义类相似,不过需要使用interface关键字来 实现。 • 接口可以包含实例方法、静态方法、getter和setter方法。 • 接口也需要保存为as文件,文件名必须和接口名保持一致,完全 相同。 • 定义接口的语法格式如下所示。 • package 包路径{ • 访问控制 interface 接口名称{ • function 实例方法名(参数:参数类型):返回类型; • static function 静态方法名(参数:参数类型):返 回类型; • function get 方法名():返回类型; • function set 方法名(参数:参数类型):void; •} •} 6.3.2 在类中实现接口 • 接口只是负责定义一些方法,这些方法要实现,则必须使用接口类来完 成。接口类要使用implements关键字来实现。一个类可以实现多个接口, 多个接口之间使用“,”分开。同样一个接口可以由多个子类来继承。 • 下面的示例代码继承上一节中的Iperson接口,并创建子类Man。代码如下 所示。 • package { • //定义类Man,继承自接口IPerson • public class Man implements IPerson { • //定义类方法walk • public function walk():void { • trace("男人走路有力量!!"); •} • //定义类方法say • public function say():void { • trace("男人说话直截了当!"); •} •} •} 6.4 继承 • 继承(Inheritance)是面向对象技术的一个重要 的概念,也是面向对象技术的一个显著特点。继 承是指一个对象通过继承可以使用另一个对象的 属性和方法。准确的说,继承的类具有被继承类 的属性和方法。被继承的类,称为基类或者超 类,也可以称为父类;继承出来的类,称为扩展 类或者子类。 6.4.1 继承的定义 • 类的继承要使用extends关键字来实现。其语法格式如下所 示。 • package{ • class 子类名称 extends 父类名称{ •} •} • 下面的示例创建一个新类Man,它继承自Person类,这样 Man类就是子类,而Person类就是父类。用法示例代码如 下: • package{ • class Man extends Person{ •} •} 6.4.2 属性和方法的继承 • 子类可以继承父类中的大部分的属性和方法,但是父类中使用“private”访问控制 符定义的属性和方法不能被继承。 • 下面的示例新建一个PC类作为父类,该类有两个实例属性name和age,有两个实例方 法walk()和say()。代码如下所示。 • 创建父类PC,代码如下所示。 • package com.lzxt{ • //构建类 • public class PC { • //构建属性 • public var name:String="浪子啸天"; • public var age:int=30; • //构建方法 • public function walk():void { • trace("人可以走路!"); •} • public function say():void { • trace("欢迎你来到as3世界"); •} •} •} 6.4.3 重写override • 通过继承父类,可以继承父类的属性和方法。但有些时候 指需要使用父类中方法名称,而需改变其内容时,就需要 利用重写来修改其方法内容。 • 在ActionScript 3.0中,只能重写实例的方法,不能重写 实例属性。还有父类中方法的访问控制符为final的方法也 不能进行重写。 • 下面在上节的子类Man中重写父类PC的方法walk(),代码如 下所示。 • package com.lzxt{ • //继承父类 • public class Man extends PC { • public override function walk():void { • trace("这是重写过的走路方法"); •} •} •} 6.5 AS3.0命名空间 • 在ActionScript3.0中引入了命名空间的概念,使 用命名空间,可以控制标识符的可见性,可以管 理各个属性和方法的可见性。不管命名空间是在 的内部还是外部,都可以应用于代码。 ActionScript 3.0中有4个访问控制符,分别为: public、private、internal和protected。这4个 访问控制符就是一种命名空间,同样,也可以定 义自己的命名空间。本节就来介绍一下自定义命 名空间和应用命名空间的方法。 6.5.1 命名空间的定义 • 命名空间常见的情况有两种:一是将命名空间定义到一个 度类的as文件中,该命名空间能够使不同的包进行访问; 二是将命名空间定义在类体中,该命名空间仅在本类中进 行访问。 • 1.将命名空间定义在一个独立的as文件中 • 下面的示例定义一个lzxt命名空间,代码如下所示。 • package{ • //定义命名空间 • public namespace lzxt = "http://www.flacs.cn/" •} • 说明:从上例可以看出,定义一个命名空间需要使用 namespace关键字。 • 2.将命名空间定义在类体中 6.5.2 使用命名空间 • 若在类体中定义命名空间,则可以像访问控制符一样的使用,在 定义的属性或者方法之前加上命名空间就ok了。如下面的代码: • package { • class SampleSpace { • //定义命名空间 • namespace lzxt • lzxt var name:String=“浪子啸天” • //使用自定义命名空间控制方法 • lzxt function welcome():void { • trace("欢迎使用自定义命名空间"); •} •} •} 第7章 AS3.0显示编程 • ActionScript 3.0的显示功能有了很大的革新, 原有的显示结构发生了重大的改变。对于熟悉了 ActionScript以前版本中MovieClip影片剪辑控制 和使用的AS程序人员来说,这次革新将导致一个 新的学习过程。ActionScript 3.0显示编程的内 容主要是关于如何使用ActionScript来生成和控 制各种图形、动画等显示对象。显示对象通常指 的是显示在Flash Player舞台上的可视化的对 象。 7.1 显示对象简介 • 显示对象(Display Object),指的是可以在舞 台显示的一切对象,包括可以直接看得见的图 形、动画、视频、文字等,也包括一些看不见的 显示对象容器。在ActionScript 3.0中,任何的 复杂的图形都是由显示对象和显示对象的容器共 同构成。 7.1.1 AS3.0中显示对象的等级结构 • 编译完成的SWF文件,以最根部的stage(舞台)为基础,展现出不同的显 示效果。利用ActionScript 3.0构建的Flash播放文件都有都有一个由显 示对象构成的层次结构,这个结构称为“显示列表”。这个显示列表按照 一定的等级和层次在舞台上显示出来,构成复杂的显示对象。 • ActionScript 3.0 支持的显示对象的结构类似于“树状结构”,以舞台 为根,SWF文件为干,显示对象为枝叶。具体结构见图所示。 7.1.2 显示对象的种类 • 在ActionScript3.0中,所有的显示对象都属于同 一个类:DisplayObject类。所有的显示对象都是 其子类。本节将对显示对象的种类进行简单的介 绍,并且进行简要的分类。 • 1.显示对象的具体种类 • 2.显示对象分类 7.1.3 显示列表 • 在前文中已经说到,ActionScript 3.0支持的显示对象的结构类 似于“树状结构”,这上面的所有的显示对象和容器,就构成了 显示列表。显示列表是ActionScript 3.0中的一个新概念。显示 列表就是一个显示对象的清单,只要在Flash Player中显示出来 的对象,都是该显示列表中的内容。 • 在ActionScript 3.0中,显示对象能否显示出来,取决于是否加 入了显示列表。如果加入了显示列表,该对象就会被显示出来; 否则,即使该对象已经被创建,也不能被显示出来。 • ActionScript3.0显示列表进行了以下方面的改进,具有明显的优 点。 • 1.呈现方式更为有效且文件较小,有效的提高了性能。 • 2.改进的深度管理,使层级管理更加容易 • 3.完整遍历显示列表,使对象的访问更方便 • 4.列表外的显示对象,方便了显示对象的管理 • 5.更便于创建显示对象的子类,创建可视化对象更容易 7.2 显示对象的一些基本概念 • 在舞台上看到的显示对象,都有它们各自的属 性,如位置、大小、透明度等等。这些属性都来 自于显示对象的基类DisplayObject,该类总结了 大部分显示对象的共有的特征和行为。特征对应 于显示对象的属性,行为对应于显示对象的方 法。 • 在ActionScript 3.0中,DisplayObject类共有25 个属性,6个方法和6个事件。下面将简单介绍一 些常用的属性和方法,对于复杂的应用,将在后 面的章节结合具体的实例讲解。 7.2.1 显示对象的常见属性 • 显示对象的属性共有25个,本节将介绍常用的一些基本属性。 • (1)横坐标x:显示对象注册点距离自己父级容器注册点之间的水平距 离,以象素为单位。如果父容器是舞台,那么就是自身注册点与舞台原点 间的水平距离。 • (2)纵坐标y:显示对象注册点与父级容器注册点之间的竖直距离,以象 素为单位。若父容器为根对象root,则为自身注册点与舞台原点之间的竖 直距离。 • (3)宽度width:显示对象最左边到最右边之间的距离,以象素为单位。 • (4)高度height:显示对象最上边到最下边之间的距离,以象素为单 位。 • (5)横向缩放比例scaleX:一个比例值,0~1之间的数字。控制显示对 象的横向缩放比例。 • (6)纵向缩放比例scaleY:一个比例值,0~1之间的数字。控制显示对 象的纵向缩放比例。 • (7)鼠标横向横坐标mouseX:鼠标相对于当前显示对象注册点之间的水 平距离。 • (8)鼠标横向纵坐标mouseY:鼠标相对于当前显示对象注册点之间的竖 直距离。 7.2.1 显示对象的常见属性 • (9)顺时针旋转角度rotation:显示对象绕轴点顺时针旋转的角度。0~180度表示 顺时针旋转角度,0~-180度表示逆时针旋转角度。如果超过了这个范围,则自动减 去360的整数倍。 • (10)透明度alpha:0~1之间的值,0表示完全透明,1表示完全不透明。 • (11)可见性visible:Boolean值,用于控制显示对象是否可见。true表示将对象显 示,false表示不显示对象。但不管设置成何值,该显示对象始终位于显示对象列表 中。 • (12)遮照mask:持有的引用是用来遮照的显示对象。 • (13)显示对象名字name:通常生产显示对象时,会分配默认的名字。若有需要,可 以使用代码进行修改。 • (14)父容器parent:在显示列表中每个显示对象都有其父容器。parent属性指向显 示对象的父容器,若显示对象不在父容器,则该属性为null。 • (15)根对象root:返回SWF文件主类的实例。若显示对象不在父容器,则该属性为 null。 • (16)舞台stage:该属性持有的引用指向该显示对象所在的舞台。每个Flash程序, 都有一个舞台。 • 除了以上的16个属性之外,DisplayObject对象还有9个属性,分别为:loaderInfo、 cacheASBitmap、filters、scale9Grid、blendMode、accessibilityProperties、 opaqueBackground、scrollRect和transform。这些属性在后面的章节中根据需要进 行讲解。 7.2.2 显示对象的方法 • 显示对象的基本方法有6个,常用的方法如下: • (1)getBounds()方法:返回一个矩形区域,该矩形定义 相对于显示对象所在坐标系的显示对象区域。 • (2)getRect()方法:返回一个矩形区域,该矩形定义相 对于显示对象所在坐标系的显示对象区域,注意该区域不 包含形状上的笔触宽度。 • (3)hitTestObject()方法:返回一个Boolean值,若为 true,表示两个对象重叠或相交,否则为不相交。 • (4)hitTestPoint()方法:返回一个Boolean值,若为 true,表示该对象对应点重叠或相交,否则为不相交。 7.2.3 显示对象的事件 • 显示对象的事件有6个,常见的如下: • (1)added事件:将显示对象添加到显示列表中时会调度该时间。下面的两种方法会 触发此事件:将显示对象添加到容器、将显示对象添加到容器的某一层次。 • (2)addedToStage事件:将显示对象直接添加到舞台显示列表或将包含显示对象的 子对象添加至舞台显示列表中时会调度该事件。下面的两种情况下会触发此事件:将 显示对象添加到容器、将显示对象添加到容器的某一层次。 • (3)removed事件:要从显示列表中删除显示对象时会调度该事件。以下两种情况下 会生成此事件:将显示对象容器的某个显示对象删除、将显示对象容器中的某个层次 的显示对象删除。 • (4)removedFromStage事件:要从显示列表中删除显示对象或者删除包含显示对象 的子对象时会调度该事件。以下两种情况下会生成此事件:将显示对象容器的某个显 示对象删除、将显示对象容器中的某个层次的显示对象删除。 • (5)enterFrame事件:播放头进入新帧时调度该事件。若播放头不移动,或者只有 一帧,则会继续以帧频调度此事件。 • (6)render事件:在显示器述评之前调度该事件。当使用render事件的显示对象进 入舞台时,或者显示对象存在于显示列表时才会触发该事件。要保证render事件在当 前帧触发,必须调用stage.invalidate()。 7.3 管理显示对象 • 显示对象只有显示在屏幕之上,才能达到要实现 的效果。显示对象容器就是用来储存和显示显示 对象的对象。要实现在显示对象容器中显示对 象,就需要把显示对象加入到显示对象列表中。 本节主要介绍如何添加和删除显示对象,如何通 过深度管理对象以及如何访问显示对象。 7.3.1 容器的概念 • 所有的显示对象都要放入显示对象容器中才能够 显示,为了方便区分,把显示对象容器简称为容 器。容器是可以嵌套的,容器中可以放置非容器 显示对象,也可以放置子容器对象。 • 容器的主要功能有一下几点: • 提供访问、添加、删除显示对象的功能。 • 具有深度管理功能。 • 其中深度管理也就是管理容器中子对象的叠放次 序。所谓的叠放次序,表示显示对象重叠时从前 到后的显示顺序。处于显示顺序最前面的完整显 示,后面的对象依次被前面的对象遮挡,甚至有 的不能显示出来。 7.3.2 添加显示对象 • 在ActionScript 3.0中,要把一个对象显示在屏幕中,需要作两 步工作,一是创建显示对象,二是把显示对象添加到容器的显示 列表中。加入显示列表的方法有addChild()和addChildAt()。 • 要在ActionScript 3.0中创建一个显示对象,只需使用new关键字 加类的构造函数即可。只要是继承自DisplayObject类或者其子类 的的实例都可以添加到显示对象列表中,比如Sprite, MovieClip,TextField,或自定义类。用下列代码创建TextField (文本框)的代码如下所示。 • var mytext:TextField =newTextField( ); • 上面已经使用代码建立了一个文本框实例,但是它并没有位于显 示列表中,也就是说它现在还没有显示在屏幕上。要把这个文本 框显示在屏幕中,必须使用容器类的addChild()或者addChildAt() 方法加入到显示列表中。 • 1.将显示对象直接添加到显示列表中 • 2.将显示对象添加到指定位置 7.3.3 删除显示对象 • 要移除位于显示对象列表中的显示对象,需要使 用容器类的removeChild()和removeChildAt()方 法。 • 1.移除指定名称的显示对象 • 要移除已经知道显示对象名称的显示对象,可以 使用显示对象类的removeChild()方法其用法格式 如下: • 容器对象.removeChild(显示对象) • 2.删除指定索引的显示对象要删除指定位置索引 的显示对象,可以使用显示对象类的 removeChildAt()方法。其用法格式如下所示。 • 容器对象.removeChildAt(位置索引) 7.3.4 深度管理 • 深度,也就是前文所说的位置索引,用于说明同一个容器 中同一级别的所有显示对象从前到后的叠放次序。 • 在ActionScript 3.0中,使用了全新的深度管理体系和轻 巧的深度管理方法,使我们可以很方便和舒适的添加和访 问对象。此深度管理体系有两个重要的特点: • 深度由各自的容器对象所管理。每一个容器都知道自己有 多少个子对象,这个数目记录在自己容器的numChildren属 性中。每一个对象在容器显示列表中的位置索引代表了其 深度值。每一个容器的深度范围为0~numChildren-1。 • 添加显示对象会自己调整各个显示对象的深度,避免层次 冲突。比如某一个深度已经有了一个显示 7.3.5 访问显示对象 • 要访问加入到容器中的显示对象,可以通过3种方法来实现:通过 深度访问、通过名字访问和通过全局坐标访问。 • 1.通过深度访问显示对象:通过深度来访问显示对象,要使用 getChildAt()方法。用法格式如下: • 容器对象.getChildAt(深度) • 2.通过名字访问显示对象:每一个显示对象都有一个名称,该名 称可以使用该显示对象的name属性进行访问和设置。在创建显示 对象的时候,可以指定显示对象的名字,也可以不指定显示对象 的名字。若没有指定,Flash Player会自动的分配给该显示对象 一个默认的名字,如:“instance1”“instance2”等。 • 3.通过坐标访问显示对象:在ActionScript 3.0中,可以通过坐 标来访问置于该坐标之上的所有显示对象。 getObjectsUnderPoint()方法的用法格式如下: • 容器对象. getObjectsUnderPoint(点对象); 7.4 处理显示对象 • 显示对象放在舞台之后,可以进行大量的操作, 比如改变对象的位置、透明度、颜色,可以使显 示对象旋转,也可以控制拖动显示对象。这些都 要通过DisplayObject类及其子类的属性和方法来 实现。本节通过一些实例,介绍使用这些属性和 方法控制显示对象发生变化的方法。 7.4.1 改变对象的位置 • 要改变一个显示对象的位置,只用调整显示对象的横坐标x和纵坐 标y这两个属性就可以了。注意x和y属性始终是指显示对象相对于 其父显示对象坐标轴的(0,0)坐标的位置。 • 下面的实例在舞台创建一个显示对象圆和四个箭头对象。通过点 击四个箭头控制圆上下左右移动。使用文档类:SetXY, 7.4.2 缩放显示对象 • 若要缩放显示对象,可以采用两种方法来缩放显示对象的 大小:使用尺寸属性(width和height)或缩放属性 (scaleX和scaleY)。 • width和height属性使显示对象的宽和高,它们以象素为单 位,可以通过指定新的宽度和高度值来缩放显示对象、 • scaleX和scaleY属性是指显示对象的显示比例,是一个浮 点数字,最小值为0,最大不限,值为1表明和原始大小相 同。缩放值大于1表示放大显示对象,小于1表示所需显示 对象。 • 这两种方法都可以缩放显示对象,在使用一种属性进行缩 放的时候,另一种属性的值也会对于发生变化。比如使用 尺寸属性改变显示对象时,修改width的值为width/2,则 该显示对象的缩放属性scaleX将变为0.5。 7.4.3 旋转显示对象 • 若要旋转显示对象,可使用显示对象的rotation 属性来实现。如果要旋转某一个显示对象,可以 将此属性设置为一个数字(以度为单位),表示 要应用于该对象的旋转量。 7.4.4 淡化显示对象 • Flash之所以“闪”,透明度alpha这个属性起到了至关重要的左右。使用 该属性可以使显示对象部分透明或者全部透明,也可以通过alpha属性控 制显示对象的淡入淡出。alpha属性的值是0到1之间的浮点数。0表示完全 透明,1表示完全不透明。 • 下面的实例实现这样的效果:鼠标滑上显示对象时,该显示对象透明度变 为原来的一半;鼠标滑出显示对象时,该显示对象的透明度变为完全不透 明。使用文档类:SetAlpha,代码如下所示。 7.4.5 拖曳显示对象 • 在ActionScript 3.0中,只有Sprite及其子类才具有 StartDrag()、StopDrag()方法和dropTarget属性。也就是说,只 有Sprite及其子类才可以被拖动,执行拖曳动作。 ActionScript3.0中的StartDrag()方法的参数和使用格式如下所 示。 • 显示对象.startDrag(锁定位置,拖动范围); • 格式说明如下: • 显示对象:Sprite对象及其子类生成的对象 • 锁定位置:Boolean值,true表示锁定对象到鼠标位置中心, false表示锁定到鼠标第一次单击该显示对象所在的点上。可选参 数,不选默认为flase。 • 拖动范围:Rectangle 矩形对象,相对于显示对象父坐标系的一 个矩形范围。可选参数,默认值为不设定拖动范围。 7.4.6 遮罩显示对象 • 遮罩(mask),是Flash中常用的一种图形处理技术。具体 是指一个显示对象用作遮罩来创建一个孔洞,透过该孔洞 使另一个显示对象的内容可见。具体的说,就是一个显示 对象作为窗口,透过这个窗口显示另一个显示对象的内 容。注意:用于遮罩的显示对象是不会出现在显示屏幕中 的。 • 在ActionScript 3.0中,遮罩效果要使用显示对象的mask 属性来实现。用法格式如下: • 显示对象1.mask=显示对象2; • 若不想继续使用遮罩,那么将显示对象的mask属性设置为 null即可。用法格式如下: • 显示对象1.mask=null; 7.4.7 碰撞检测 • 在ActionScript3.0 中,所有的显示对象都可以 作为检测和被检测的对象来检测碰撞。其方法有 两种,用法格式如下: • 显示对象1.hitTestObject(显示对象2); • 说明:该方法用于检测两个显示对象是否发生碰 撞,返回一个Boolean值,若为true,表示两个对 象发生了碰撞,否则为没有碰撞。 • 显示对象.hitTestPoint(x,y,检测方法); 第8章 使用与控制影片剪辑 • 在Adobe Flash CS3 Professional中创建的动画 和影片剪辑元件都是MovieClip,即影片剪辑。在 ActionScript 3.0中,MoveClip是Sprite类的子 类,其地位和重要性都大大的降低。对于面向对 象编程的程序人员来说,它的用处已经不大;但 是对于习惯在Flash中创建动画,并使用代码进行 控制的动画设计人员来说,它还是有着非常重要 的作用。 • 本章着重介绍在Flash事件轴上添加事件和方法来 操作和控制影片剪辑;同时也从面向对象的角度 着手,使用外部的文档类来操作影片剪辑,实现 文档与代码分离。 8.1 影片剪辑基础知识 • 影片剪辑(MovieClip)类是ActionScript用来控 制Flash创作的动画元素的重要工具。通过 MovieClip类的属性和方法,可以控制影片剪辑的 播放与停止,正放和倒放,也可以动态的控制影 片剪辑的播放顺序。本节将介绍影片剪辑的基础 知识和MovieClip类的属性和方法。 8.1.1 MovieClip简介 • MovieClip类在ActionScript 1和ActionScript 2中是所有舞台上 的实例的基类,所有的舞台元件都通过MovieClip类的属性和方法 进行控制。在ActionScript 3.0中,影片剪辑只是舞台中众多显 示对象的一种,其使用主要用于需要时间轴支持的显示对象,对 于不需要事件轴的显示对象,尽可能的使用Shape类或者Sprite类 以提高显示性能。 • 只要是在Flash中创建的影片剪辑元件,Flash就会自动的将该元 件添加到文档的库中。MovieClip会默认其为该类的一个实例,也 就具有了该类的属性和方法。 • 将库中的影片剪辑的实例放在舞台上时,如果该影片剪辑有多 帧,那么它会按照其时间轴进行循环播放,除非通过使用 ActionScript代码进行控制。作为独有的功能,只有MovieClip类 的对象可以使用Flash创作工具创建的动画效果。其它的显示对象 类的实例都不能创建时间轴动画,要创建动画,只能使用编程方 式来实现。 8.1.2 处理MovieClip对象 • 在Flash中使用编译器把fla文件发布为SWF文件 时,舞台上的所有影片剪辑实例都会转为 MovieClip(影片剪辑)对象。利用“属性”面板 中的“实例名称”文本输入框指定影片剪辑的实 例名称,进而通过访问该名称实现对其访问和控 制。如果该影片剪辑中还嵌套有其它的影片剪 辑,则通过使用点语法加影片剪辑来访问和控 制。比如下面的代码通过点语法控制mc影片剪辑 中的mc1影片剪辑执行播放动作。代码如下所示。 • mc.mc1.play() 8.2 影片剪辑基本控制 • 影片剪辑的控制,主要指控制影片剪辑的播放和 影片剪辑基本属性的变换。通过变换产生一定的 动画效果。本节是为刚学习Flash动画,需要使用 帧代码控制影片剪辑的读者准备的。当然本节也 会从面向对象的角度,使用文档类实现相同的效 果。 8.2.1 影片剪辑的播放控制 • 影片剪辑的播放控制,主要是指控制影片和影片 剪辑的播放、停止、前进、后退、倒放和跳转。 通过这些操作,控制影片剪辑的播放流程和顺 序,进而实现不同的动画需求。 • 本节通过一个简单的控制动画实例,说明这些 MovieClip类方法的基本使用方法。由于本书以 ActionScript编程为主,所以时间轴动画的制作 过程不再介绍,只讲解影片剪辑控制过程中所需 要的代码。 8.2.2 动态加载并控制库中的影片剪辑 • 在ActionScript 2.0中被广泛使用的 duplicateMovieClip()、attachMovieClip()函数 在ActionScript3.0中已经被去掉了。现在要实现 相同的效果需要从库中建立类链接,然后通过使 用new语句创建该类的实例实现类似于复制的效 果。 8.2.3 加载并控制外部的影片剪辑 • 在ActionScript2.0中,可以使用MovieClip的loadMovie()函数和loadMovienum()函 数载入外部的影片,也可以时MovieClipLoader()类来载入并控制外部的影片。在 ActionScript 3.0中,这些函数和类全部被去除了,要实现相同的功能,必须使用显 示对象的Loader类。 • 若要加载并控制外部的SWF影片,需要执行下面的操作: • (1)先创建一个URLRequest对象,用于储存要载入文件的URL。 • (2)创建一个Loader对象。 • (3)调用Loader对象的load()方法,并把URLRequest对象作为参数传递给Loader对 象。 • (4)建立一个空的显示对象容器,使用addChild()方法将其添加到舞台,用于加载 外部载入的影片。 • (5)建立事件侦听函数,侦听加载事件是否完成。 • (6)加载完成之后,使用addChild()方法将Loader对象添加入空白显示对象容器。 • (7)使用显示对象的属性控制该显示对象容器的位置和大小。 • (8)使用MovieClip类的播放控制方法控制外部影片的播放。 第9章 AS3.0动画编程 • 动画是Flash创作的基础,从最初的帧补间动画到 现在的动画编程,Flash动画制作走出了一条非常 圆满的道路。ActionScript 3.0的动画编程主要 关注两方面的情形:一是通过改变显示对象的属 性创建动画效果;二是利用Shape类的绘制类进行 代码绘制,渲染效果。 • ActionScript 3.0动画编程要涉及数学、物理学 等方面的内容非常的多,也比较复杂。在本章先 介绍两种基本的动画实现原理并创建简单的动画 效果。对于数学和物理学的基础知识,则留到后 面的章节具体详细的讲述。 9.1 可视化动画编程简介 • 动画是指控制显示对象随着时间不断的发生变化,这些变 化可能是位置的变动,速度的变化,外观形状的改变,颜 色透明度的改变等等。总而言之,动画可以实现的形式是 纷繁多样的。借用一句口语“只有想不到,没有做不 到”,只要能够想到的效果,在Flash中都能够实现。 • 最早版本的Flash中,使用逐帧动画和补间动画来实现动画 效果,一个显示对象放于一个关键帧上,然后插入另一个 关键帧,改变第二个关键帧中显示对象的显示属性,然后 两帧之间通过差值计算形成完整的事件轴动画。 • 可视化的动画编程,伴随ActionScript脚本语言的出现开 始逐渐的兴起。从早期ActionScript中的“三帧法”动画 编程,逐步发展到onClipEvent(enterframe)、 onEnterFrame循环事件,ActionScript动画编程中帧循环 起着至关重要的作用。 9.2 动画编程原理 • 和所有的动画显示一样,Flash的动画原理也是通过不断的刷新屏幕,利用每次屏幕 上显示对象位置的不同、大小色彩的变化等产生动画效果。动画编程的关键是一定要 有变化,而且该变化需要在一定时间内来完成。Flash中使用帧频来控制每秒钟刷新 屏幕的次数,通过使用的帧频的范围在12~60帧每秒,推荐使用的是24帧每秒这样的 一个速度。 • ActionScript 3.0的动画编程也是同样的原理,通过不断的刷新屏幕来实现动画效 果。 • ActionScript 3.0的动画编程按照实现的方式可以分为两种: • 对显示对象的显示属性进行控制,调整每次刷新屏幕时显示对象的显示属性实现动画 效果,这种称为显示属性动画。 • 利用绘制API在每帧中使用代码绘制不同的形状,从而产生的动画效果,这种称为代 码绘制动画。 • 通过编程实现刷新屏幕,ActionScript 3.0中提供了两种方式可供选择: • 帧循环更新:利用Flash本身的帧频速度,在每次刷新屏幕时改变显示对象。此方法 需要使用事件侦听器侦听显示对象的Event.ENTER_FRAME事件。 • 定时器更新:利用Timer类的定时更新功能,每隔一定的事件使显示对象改变一次。 此方法需要使用事件侦听器侦听显示对象的TimerEvent.TIMER事件。 9.3 代码绘制动画效果 • 代码绘制动画效果,就是每帧绘制的图形有所变化,这样 播放起来就形成了动画。绘制代码主要使用Graphics类的 绘制API来进行绘制。 • 下面创建一个非常流行的电流动画效果。其实现原理为: 首先在水平方向每隔3个像素进行绘制,而竖直方向的绘制 点可以在一个位置附近随机变化,这样形成一条随机弯曲 的线条;然后使用帧循环事件,每帧重新绘制一次,实现 线条的随机变化,进而实现最终的电流效果。 9.4 改变对象属性 • 本节将通过改变舞台的显示属性来实现一系列的 动画效果。这些效果大体分为两部分:一部分是 与运动相关的动画,主要是通过修改显示对象的 坐标来实现。此部分将会介绍一些物理运动学的 基础知识。另一部分通过改变显示对象的缩放属 性、旋转属性和透明度属性,实现显示和形状动 画Ч  9.4.1 移动物体 • 要实现移动舞台的效果,只需改变坐标属性即可。修改横 坐标可以实现水平运动的效果,修改纵坐标可以实现竖直 运动的效果。 • 在物理学中,物体运动的快慢是用速度来描述的。速度反 映了物体在单位时间内发生的位移的大小。对于匀速运动 的物体,位移的大小等于速度乘以时间。 • 在Flash中,实现物体的运动,运算的原理是:确定速度大 小,帧循环刷新时原来的位置坐标加上速度的值。 • 原理主要公式如下: • var _vx:Number=水平速度值 • var _vy:Number=竖直速度值 • 显示对象.x+=vx • 显示对象.y+=vy 9.4.2 加速运动的物体 • 在物理学中,物体运动的快慢是用速度来描述 的,而速度变化的快慢是用加速度来描述的。加 速度反映了物体在单位时间内速度变化的快慢。 • 加速度和速度关系的公式为: • v=v+a • vx+=ax • vy+=ay 9.4.3 减速运动的物体 • 物理学中,简单的减速运动和加速运动一样,利 用加速度的值来改变速度的值,进而实现物体的 位置变化。但加速运动加速度为正值,减速运动 的加速度为负值。当然,也可以通过速度减去一 个正的加速度实现减速运动的效果。 • 减速运动中加速度(此处按照加速度为正值)和 速度关系的公式为: • v=v-a • vx-=ax • vy-=ay 9.4.4 鼠标跟随缓动效果 • 在Flash中最常见的缓动效果,就是一个显示对象先快后慢,逐渐 的移动到目的地。这也是一个减速运动的过程,不过运动过程中 的加速度会发生改变。 • 二次缓动是最常用的,通过每次前进当前位置和目标位置之间距 离的二分之一,如此重复的操作,知道最后无限的接近目标点。 但是这样永远无法实现达到目标点,所以一般控制当前位置和目 标位置之间的距离小于1象素时,可以近似认为已经达到了目标 点。 • 二次缓动的计算公式为: • dx=目标位置.x-当前位置.x • dy=目标位置.y-当前位置.y • vx=(dx)/2 • vy=(dy)/2 9.4.5 利用三角函数实现运动效果 • 数学中三角函数的正弦和余弦函数是对物体的运动非常有用的函数。这两 个函数都具有周期性,其值范围为-1~1,而且由于周期性,其值能够在- 1~1之间循环变化。利用这些特点,可以实现显示对象周期性的往复运动 效果。关于三角函数的知识请参见《数学和数字》一章的内容。 • 下面的示例利用正弦三角函数实现小球在平衡位置附近的往复运动。其实 现流程为:创建一个小球→加入场景→创建帧循环事件处理函数→利用帧 循环事件,实现小球的运动。使用文档类:MoveSin, 9.4.6 缩放动画效果 • 要实现缩放效果,只需实现不断修改显示对象的 缩放属性scaleX和scaleY即可。 • 下面的示例通过修改矩形的scaleY属性,实现矩 形缩放效果。其实现流程为:创建一个小球→加 入场景→创建帧循环事件处理函数,实现缩放操 作→利用帧循环事件,实现小球的缩放。使用文 档类:Scale, 9.4.7 旋转动画效果 • 要实现旋转一个显示对象的动画效果,只需要修 改rotation属性即可。 • 下面的示例用一个箭头来实现鼠标跟随效果,跟 随鼠标的箭头的指向会随着鼠标位置的变化而发 生旋转。其实现流程为:创建一个小球→加入场 景→创建帧循环事件处理函数,实现旋转效果→ 利用帧循环事件,实现小球的旋转。使用文档 类:Rotation, 9.4.8 淡入淡出动画效果 • 淡入淡出效果也是Flash动画制作中最常用的一种技术,此技术的 实现是通过改变显示对象的透明度alpha属性实现的。 • 下面的示例实现小球的淡入淡出效果。创建一个小球→加入场景 →创建帧循环事件处理函数,实现显示对象透明度先逐渐增加, 当透明度为1时逐渐减少,减少到1时再逐渐增加,通过循环实现 淡入淡出效果→利用帧循环事件,实现小球的淡入淡出。使用文 档类:Alpha, 9.5 借助Timer类实现动画效果 • 使用Timer类产生的动画效果和使用帧循环ENTER_FRAME事 件产生动画的原理一样,都是通过间隔一定的时间进行一 次刷屏来实现动画效果。上一节中使用帧循环事件创建的 一切动画,都可以是Timer类的事件来实现。 • 要注意Timer类的TimerEvent.TIMER事件,可能与Flash的 刷屏不同步,会产生延迟现象。所以在使用的时候,需要 使用updateAfterEvent()方法强制更新屏幕。 • 使用Timer类实现动画还有几个好处: • 可以利用Timer.stop()方法控制动画的播放与停止; • 可以在构建Timer对象时控制动画的刷新次数,实现预期动 画效果; • 可以利用TimerEvent.TIMER_COMPLETE事件,在停止播放时 侦听,从事开始新的动作。 9.6 Tween类创建动画效果 • 在ActionScript 2.0中内建的Tween类都被转移到 了ActionScript 3.0的fl. transitions包中,用 于实现运动、变形等动画效果。本节主要介绍常 用的运动、变形Tween类。 9.6.1 Tween类应用基础 • 在ActionScript 3.0中,使用Tween类,可以通过指定操作 目标的影片剪辑属性在一定的帧数或者时间内创建动画效 果,进而实现影片剪辑的运动动画,缩放动画,淡入淡出 动画等显示效果。 • 在Tween类中还可以指定缓动方法,从而实现非线形变化效 果。“缓动”是指动画在运行期间的速度非线形变化,使 动画显得更加的形象逼真。Tween类中的缓动方法位于 fl.transitions.easing包中,该包提供了多种缓动方法供 用户使用。 • 要利用Tween类创建动画效果,需要先创建一个Tween对 象,使用该对象来指定要控制的显示对象的属性要发生什 么样的变化。创建Tween类对象的方法如下所示。 • Tween(目标对象,目标对象的属性,缓动方式,初始值,结束 值,动画持续时间,记时方式); 9.6.2 运动折返效果 • 返回类实现的动画是在动画执行的开始端、结束 端或者两端兼有回返动作,用以模拟溢出动画效 果。执行动画的方法取决于三个缓动函数: • easeIn:在动画开始时往后运动,然后反向朝目 标移动。 • easeOut:在动画结束时稍微冲过结束点,然后倒 转方向回来朝着目标。 • easeInOut:在动画开始时先向后运动,再倒转方 向并朝目标移动,结束时冲过目标,然后再倒转 方向,朝目标移动。 9.6.3 运动回弹效果 • 回弹类实现的动画是在动画的起始端,结束端或者两端兼 有执行回弹动画效果。具体在何端回弹同样取决于三个缓 动函数。回弹的次数取决于动画持续的时间,持续的时间 越长,回弹的次数越多。此效果可以实现舞台中小球跳动 的动画效果。 • Bounce类的三个回弹函数效果: • easeIn:在动画开始时以较慢速度开始回弹运动,然后再 执行时加快运动速度。 • easeOut:在动画结束时以较快速度开始回弹运动,然后再 执行时减慢运动速度。 • easeInOut:在动画开始时缓慢地开始跳动,进行加速运 动,最后进行减速。 9.6.4 正弦弹性效果 • Elastic类实现的动画是在动画的起始端,结束端或者两端 兼有执行弹性动画效果,运动方式按照正弦波逐渐衰减进 行。具体在何端回弹同样取决于三个缓动函数。回弹的次 数不受动画持续的时间影响。此效果也可以实现舞台中小 球跳动的动画效果。 • Elastic类的三个回弹函数效果,此类和Bounce基本类似, 区别在与弹性采用正弦方式: • easeIn:在动画开始时以较慢速度开始回弹运动,然后再 执行时加快运动速度。 • easeOut:在动画结束时以较快速度开始回弹运动,然后再 执行时减慢运动速度。 • easeInOut:在动画开始时缓慢地开始跳动,进行加速运 动,最后进行减速。 9.6.5 Regular和Strong运动效果 • Regular类实现的动画是加速运动、减速运动和先 加速后减速的动画效果。具体在方式同样取决于 三个缓动函数。 • Regular类的三个回弹函数效果: • easeIn:在动画开始时做初速度为零的加速运 动。 • easeOut:动画执行匀减速运动,末速度为零。 • easeInOut:在动画开始时做初速度为零的加速运 动,然后做减速运动,直到速度为零。 9.6.6.线性运动效果 • None类实现的是一种线形运动的效果,显示对象 一直做运动运动。其方法函数有四种easeIn()、 easeOut()、easeInOut()和easeNone(),这四种 方法实现的是相同的效果,在执行时都是匀速直 线运动。使用时可以任意选择。 9.7 TransitionManger创建动画效果 • 在ActionScript 2.0中内建的TransitionManger 类也被转移到了ActionScript 3.0的fl. transitions包中,用于实现页面切换动画效果。 本节主要介绍常用的TransitionManger类。 9.7.1 TransitionManger用法基础 • TransitionManger类管理了一系列的过渡动画效果。通过使用这 些效果,可以很方便的实现页面之间的切换操作。 • TransitionManger类提供了10中不同的切换效果,把这些切换效 果应用于影片剪辑,就能实现很漂亮的过渡效果。这些类同样位 于fl.transitions包中。 • 要使用TransitionManger类实现过渡动画效果,需要先创建该类 的实例。ActionScript 3.0中创建改类的实例的方法有两种。 • TransitionManager.start()方法,用法格式如下所示。 • TransitionManager.start(目标影片,过渡对象参数); • 目标影片:指过渡效果作用的影片。注意,只能时影片剪辑实 例。 • 过渡对象参数:对象,包含所有的过渡参数的集合。对象应包含 type参数,该参数指示要应用的过渡效果类。此外,还必须包括 该过渡效果类所必需的任何参数。 9.7.2 遮帘过渡Blinds效果 • 此过渡实现影片剪辑逐渐消失或逐渐出现的矩形来显示的过渡动画效果, 类似于百叶窗效果。该过渡对象参数为: • type:Blinds, direction:Transition.IN,duration:2,easing:None.easeNone,numStrip s:10,dimension:0; • 参数说明: • type:指明采用10种过渡效果中的那一种,所有的过渡效果共有参数。 • direction:有两种形式Transition.IN和Transition.OUT,指明过渡动画 的方向,共有参数。 • duration:过渡动画持续时间,共有参数。 • easing:过渡动画补间效果,fl.transitions或fl.transitions.easing 包中的一种效果,共有参数。 • numStrips:“遮帘”效果中的遮罩条纹数,推荐在1~50之间,独有参 数。 • dimension:指明遮罩条纹是垂直的(0)还是水平的(1),独有参数。 9.7.3 淡化过渡Fade效果 • 此过渡实现影片剪辑淡入淡出的动画效果。该过渡对象参 数为: • type:Fade, direction:Transition.IN, duration:9, easing:Strong.easeOut • 说明:此效果只使用共有参数,不需要其它参数。 • 下面的示例在Flash CS3中使用导入一副图片,然后放入影 片剪辑中,放入舞台,命名为mc,下面的代码控制mc实现 淡入淡出动画效果。打开动作面板,输入下面的代码: • import fl.transitions.*; • import fl.transitions.easing.*; • TransitionManager.start(mc, {type:Fade, direction:Transition.IN, duration:20, easing:Strong.easeOut}); 9.7.4 飞行过渡Fly效果 • 此过渡实现影片剪辑从指定方向飞入的动画效果。该过渡对象的对象参数 为: • type:Fly, direction:Transition.IN, duration:3, easing:Elastic.easeOut, startPoint:9 • 参数说明: • startPoint:指明起始位置的整数,范围1~9,分别为:左上:1、上 中:2、右上:3、左中:4、中心:5、右中:6、左下:7、下中:8、右 下:9。独有参数。 • 下面的示例在Flash CS3中使用导入一副图片,然后放入影片剪辑中,放 入舞台,命名为mc,下面的代码控制mc实现飞行过渡动画效果。打开动作 面板,输入下面的代码: • import fl.transitions.*; • import fl.transitions.easing.*; • TransitionManager.start(mc, {type:Fly, direction:Transition.IN, duration:20, easing:Strong.easeOut,startPoint:9}); 9.7.5 光圈过渡Iris效果 • 此过渡实现影片剪辑以缩放的方形或圆形动画遮罩来显示 动画效果。该过渡对象参数为: • type:Iris, direction:Transition.IN, duration:2, easing:Strong.easeOut, startPoint:5, shape:Iris.CIRCLE • 参数说明: • startPoint:指明起始位置的整数;范围1~9,分别为: 左上:1、上中:2、右上:3、左中:4、中心:5、右中: 6、左下:7、下中:8、右下:9。 • shape:有两种,为fl.transitions.Iris.SQUARE(方形) 和fl.transitions.Iris.CIRCLE(圆形)的遮罩形状。 9.7.6 照片过渡Photo效果 • 此过渡实现影片剪辑对象像放映照片一样出现或消失的效 果。该过渡对象参数为: • type:Photo, direction:Transition.IN, duration:1, easing:None.easeNone • 说明:此效果只使用共有参数,不需要其它参数。 • 下面的示例在Flash CS3中使用导入一副图片,然后放入影 片剪辑中,放入舞台,命名为mc,下面的代码控制mc实现 照片过渡动画效果。打开动作面板,输入下面的代码: • import fl.transitions.*; • import fl.transitions.easing.*; • TransitionManager.start(mc, {type:Photo, direction:Transition.IN, duration:10, easing:None.easeNone}); 9.7.7 像素溶解过渡PixelDissolve效果 • 此过渡使用随机出现或消失的棋盘图案矩形来显示或隐藏影片剪辑对象。 该过渡对象参数为: • type:PixelDissolve, direction:Transition.IN, duration:2, easing:Regular.easeIn, xSections:10, ySections:10 • 参数说明: • xSections:指明沿水平轴的遮罩矩形部分的数目。推荐的范围1~50。 • ySections:指明沿垂直轴的遮罩矩形部分的数目。推荐的范围1~50。 • 下面的示例在Flash CS3中使用导入一副图片,然后放入影片剪辑中,放 入舞台,命名为mc,下面的代码控制mc实现像素溶解动画效果。打开动作 面板,输入下面的代码: • import fl.transitions.*; • import fl.transitions.easing.*; • TransitionManager.start(mc, {type:PixelDissolve, direction:Transition.IN, duration:10, easing:Regular.easeIn, xSections:30, ySections:30}); 9.7.8 旋转过渡Rotate效果 • 此过渡实现影片剪辑旋转动画效果。该过渡对象 参数为: • type:Rotate, direction:Transition.IN, duration:3, easing:Strong.easeInOut, ccw:false, degrees:720 • 参数说明: • ccw:Boolean值:false表示顺时针旋转;true表 示逆时针旋转。 • degrees:指明显示对象要旋转的度数。推荐范围 1~9999。旋转一周为360度。 9.7.9 挤压过渡Squeeze效果 • 此过渡实现水平或垂直缩放影片剪辑对象。过渡对象参数为: • type:Squeeze, direction:Transition.IN, duration:2, easing:Elastic.easeOut, dimension:1 • 参数说明: • dimension:指明“挤压”效果是水平的(0)还是垂直的(1)。 • 下面的示例在Flash CS3中使用导入一副图片,然后放入影片剪辑 中,放入舞台,命名为mc,下面的代码控制mc实现挤压过渡动画 效果。打开动作面板,输入下面的代码: • import fl.transitions.*; • import fl.transitions.easing.*; • TransitionManager.start(mc, {type:Squeeze, direction:Transition.IN, duration:10, easing:Elastic.easeOut, dimension:1}); 9.7.10 划入/划出过渡Wipe效果 • 此过渡使用水平移动的动画遮罩形状来显示或隐 藏影片剪辑对象。过渡对象参数为: • type:Wipe, direction:Transition.IN, duration:2, easing:None.easeNone, startPoint:1 • 参数说明: • startPoint:指明起始位置的整数;范围1~9, 分别为:左上:1、上中:2、右上:3、左中: 4、中心:5、右中:6、左下:7、下中:8、右 下:9。 9.7.11 缩放过渡Zoom效果 • 此过渡实现按比例缩放来放大或缩小影片剪辑对象。该过渡对象 参数为: • type:Zoom, direction:Transition.IN, duration:2, easing:Elastic.easeOut • 说明:此效果只使用共有参数,不需要其它参数。 • 下面的示例在Flash CS3中使用导入一副图片,然后放入影片剪辑 中,放入舞台,命名为mc,下面的代码控制mc实现缩放过渡动画 效果。打开动作面板,输入下面的代码: • import fl.transitions.*; • import fl.transitions.easing.*; • TransitionManager.start(mc, {type:Zoom, direction:Transition.IN, duration:10, easing:None.easeNone}); 第10章 数组 • 数组是具有相同数据类型的数据的集合,是编程 语言中最重要的数据结构之一。数组可以有效的 管理具有相同类型的数据,可以缩短和简化程 序。数组按照功能,可以分为简单的索引数组和 复杂的关联数组。数组按照数组维数不同,也可 以分为一维数组和多维数组。数组中存储的数据 没有类型限制,无论是数组、字符串还是对象, 都可以存储道数组中。 10.1 数组基础知识 • 数组(Array)类在ActionScript 3.0中是顶级类,直接继 承自Object类。利用数组的容器功能,可以在其中储存大 量数据。 • 数组一般分类两类:索引数组和关联数组。 • 索引数组:数组中的每个元素都存储在指定编号的位置 中,这个位置称为该数组的索引。数组的元素都用唯一的 整数下标来索引。该索引的起始值为0,每个元素保存在索 引指定的位置。多维数组也可以通过索引来访问数组,也 是索引数组。 • 关联数组:数组中的每个元素都有对应的键值,此键值为 唯一的字符串,作为数组元素的索引。关联数组是Object 类的实例,每个键值都与一个属性名称对应。关联数组就 是键和值对的无序集合。 10.2 索引数组 • 索引数组主要是利用一个无符号的整数索引值来 访问和处理数组。索引的第一个值为0,最后一个 元素的索引为数组length-1。本节利用数组索引 来对数组进行相关操作,实现对数组的分析和处 理,实现对数组的有效管理。 10.2.1 创建和访问数组 • 创建数组的方法有两种:一是利用构造函数创 建;二是利用中括号赋值来创建。 • 构造函数创建数组的代码如下: • var _arr:Array=new Array() • //创建一个空数组 • var _arr:Array=new Array(3) • //创建一个长度为3的数组,数组中的元素为空 • var _arr:Array=new Array(1,2,3,4) • //创建一个数组,并直接对该数组赋值 10.2.2 在数组中新增元素 • 在ActionScript 3.0中,能够给数组新增元素的 方法有三种,分别为:push()、unshift()和 splice()方法。这三种向数组添加新元素的方 法,push()方法实现向数组尾部添加新元素, unshift()方法实现向数组的头部添加新元素, splice()实现向数组中的指定位置添加新元素。 • 1.向数组尾部添加新元素 • 2.向数组头部添加新元素 • 3.向数组中指定位置添加新元素 10.2.3 删除数组中的元素 • 在ActionScript 3.0中,能够删除数组中元素的 方法也有三种,分别为:pop()、shift()和 splice()方法。pop()方法用于删除数组的最后一 个元素,shift()方法用于删除数组中的第一个元 素,splice()方法则用于删除数组中指定位置的 一个或多个元素。 • 1.删除数组尾部元素 • 2.删除数组头部元素 • 3.删除数组指定位置元素 10.2.4 对数组进行排序 • ActionScript 3.0的数组排序方法比 ActionScript2.0更加的强大。共有三种方法,分 别为:reverse();sort()和sortOn()方法。 reverse()方法用于实现数组的翻转,sort()方法 实现数组按指定方式排序,sortOn()方法则实现 按数组指定属性进行排序。本节还介绍了数组随 机排序的方法。 • 1.数组翻转 • 2.数组排序 • 3.数组属性排序 • 4.数组随机排序 10.2.5 从数组中查找元素 • 要从数组中查找指定的元素,可以使用indexof() 方法和lastIndexof()方法来实现,也可以使用 for循环语句、if条件语句和break跳出语句来自 定义方法来实现。 • 1.indexof()方法和lastIndexof()方法 • 2.自定义方法查找数组。 10.2.6 数组比较 • 要比较两个数组,必须使用循环来比较数组中的 每一个元素是否相等,如果所有的元素都相等, 则数组相等,否则不相等。 • 下面的示例来比较两个数组是否相等,代码如下 所示。 • (详细内容请参照本书) 10.2.7 从数组中获取元素 • 从数组中获取元素的方法有两种,一种是利用slice()方法 获取指定索引后的全部或一部分元素,并组成新的数组, 另一种方法是使用循环并返回符合条件的元素组成的新数 组。 • 1.slice()方法 • slice()方法从原数组中获取一定范围内的元素并组成新数 组返回,此过程并不修改原数组中的元素。其用法格式如 下所示。 • 数组名.slice(开始位置,结束位置) • 2.自定义方法获取数组中的元素 • slice()方法是从一个指定位置到另一个指定位置之间获取 元素,但不能只利用开始位置获取指定数量的元素。 10.2.8 复制数组 • 数组是引用型数据类型,直接引用该数组变量会在使用的过程中 造成不必要的麻烦。所以通常使用concat()方法或者slice()方法 来实现对数组的赋值,当然也可以通过自定义的方法来复制数 组。 • 1.concat()方法:concat()方法复制数组,其实质为将一个空元 素与原数组相连接,而组成一个新的数组,只是由于该方法没有 提供参数,所以产生的新数组和原数组相同,从而实现了数组的 复制效果。其用法格式如下所示。数组名.concat() • 2.slice()方法:slice()方法复制数组的实质为:从数组中截取 指定的元素而返回一个新的数组,在没有指定截取位置和截取数 目的情况下,截取的是数组中的全部元素,这样就实现对数组的 真正复制效果。其用法格式如下所示。数组名.slice() • 3.自定义方法实现数组的复制:自定义数组复制方法 Earray.duplicate()方法,使用for循环语句,把原始数组中的元 素全部添加到新数组当中,并返回新的数组。 10.2.9 数组转换为字符串 • 要实现把数组转换为字符串,ActionScript3.0提供了两种 方法,分别为:toString()方法和join()方法。toString() 方法是将数组中的元素使用逗号连接起来,转为字符串; 而join()方法的实质是将数组中的元素使用指定的字符将 数组连接起来,连接的字符是可以任意设置的。 • 1.toString()方法 • toString()方法把数组转换为字符串,其用法格式如下: • 数组名.toString() • 2.join()方法 • join()方法同样可以将数组中的元素转换为字符串。其用 法格式如下所示。 • 数组名.join(分隔符号) 10.3 关联数组 • 关联数组是以指定的名称为索引的数组,数组中 的每一个元素都是键/值对应。关联数组类似于哈 希表或映射。关联数组中使用字符作为元素的索 引,该字符通常称为关键字或者属性。本节将介 绍创建关联数组的方法和访问关联数组的方法。 10.3.1 创建关联数组 • 在ActionScript 3.0中,关联数组是Object类的实例,所 以创建关联数组不是使用Array类而是Object类。要创建关 联数组,有三种方法可以选择:利用Object构造函数创 建、使用对象文本创建和使用数组元素创建。 • 1.利用Object构造函数:构造函数创建关联数组,其格式 如下所示。 • var 对象数组:Object={关键字1:值,关键字2:值} • 2.使用对象文本创建关联数组:该方式在创建时先创建一 个对象,不需要初始化对象数据,在使用时再动态的添加 关键字和值。 • 3.使用数组元素创建关联数组:该方式同样先创建一个空 白的对象,然后使用数组操作符[]把关联数组的关键字和 值追加到关联数组中。 10.3.2 读取关联数组 • 基本的关联数组,要访问数组的元素,可以通过访问关联数组的关键字来访问,上一 节提到的三种定义方法定义的关联数组都可以使用关键字来访问。下面使用关键字来 访问关联数组,代码如下所示。 • //创建关联数组 • var myArray:Object={name:"lzxt",age:30,address:"zhengzhou"} • trace("name的值为:"+myArray.name) • //输出:name的值为:lzxt • //创建空白对象 • var myObj:Object=new Object() • //给对象赋值 • myObj.name="lzxt" • myObj.age=30 • myObj.address="zhengzhou" • trace("name的值为:"+myObj["name"]) • //创建空白对象 • var myObject:Object=new Object() • //给对象赋值 • myObject["name"]="lzxt" • myObject["age"]=30 • myObject["address"]="zhengzhou" • trace("name的值为:"+myObject["name"]) 10.4 多维数组 • 多维数组是将其它数组作为其元素的一种数组, 也就是数组嵌套数组的数组。最常见的多维数组 是二维数组,本节将着重介绍一下二维数组的定 义和访问的方法。 10.4.1 创建多维数组 • 在ActionScript 3.0中,并没有提供一个直接创 建多维数组的方法。要使用多维数组,通常通过 使用其它的方法组合来实现。常用的方法有以下 几种: • 1.数组嵌套方法 • 2.追加数组方法 • 3.循环嵌套方法 10.4.2 访问多维数组 • 访问二维数组,可以使用索引位置进行访问,其用法格式如下所 示。 • 数组名[水平索引][垂直索引] • 水平索引指外围数组的长度,垂直索引指包含的数组的长度。下 面的代码使用循环并利用索引输出所有的元素,代码如下所示。 • //创建一个空的数组 • var arr:Array=new Array(); • //数组的元素是数组 • arr[0]=new Array(1,2,3); • arr[1]=new Array(4,5,6); • arr[2]=new Array(7,8,9); • for (var i:int= 0; i标签可将 JPEG、GIF、PNG类型的外部图像文件以及SWF文件和影片剪辑嵌入 到文本中。在显示文本对象中,文本在嵌入的图像旁自动换行。 若要使用该标签,必须将显示文本设置为多行和文本换行。 多行文本显示图形 第16章 字符串 • 字符串是大量字符的组合。在ActionScript 3.0 中使用顶级类String来管理和操作字符串。 String类提供了处理原始字符串数据的方法和属 性。此外还可以使用String()函数将任意对象的 值转换为String数据类型的对象。 • 在ActionScript 3.0编程中,字符串的地位十分 重要。本章介绍的处理方法对应用TextField、 StaticText、XML、ContextMenu和FileReference 对象都有很大的作用。 16.1 字符串基础知识 • 在ActionScript 3.0中,字符是文本数据的最小 单位,其内容为单个字母或符号。字符串是字符 组成的一个序列,其内容是一个文本值,即串在 一起而组成单个值的一系列字母、数字或其它字 符。 • 在ActionScript 3.0中,可使用双引号或单引号 将文本括起来以表示字符串值。下面的是几个字 符串的示例: • "Hello" • "555-7649" • "http://www.adobe.com/" 16.2 创建字符串 • 在ActionScript 3.0中,String类用于表示字符串(文 本)数据。ActionScript字符串既支持ASCII字符也支持 Unicode字符。 • ASCII字符是一种在计算机程序中表示文本字符和符号的系 统。ASCII字符系统支持26个字母英文字母表,以及有限的 一组其它字符。 • Unicode字符也是一种在计算机程序中表示文本字符和符号 的系统,不过它是一个标准系统。Unicode系统允许使用任 何编写系统中的任何字符。 • 在ActionScript 3.0中,普通的字符串容易创建,而一些 特殊的字符需要通过转义字符来实现,本节将分别介绍创 建字符串的方法。 16.2.1 定义一个普通的字符串 • 普通的字符串的可以使用字符串文本直接创建。要创建字符串文本,可使用双引号(") 或单引号(')字符括起一些字符来创建。注意:在ActionScript 3.0中,使用双引号 和单引号创建的字符串没有任何区别。下面定创建的两个字符串是等效的: • var str1:String = "hello"; • var str2:String = 'hello'; • 除了使用字符串文本直接创建字符串,还可以使用String类的构造函数,借助new关 键字来定义。new关键字来创建字符串,如下代码所示。 • var str1:String = new String("hello"); • var str2:String = new String(str1); • var str3:String = new String(); • 使用字符串文本和new关键字创建的字符串是等效的。例如下面创建的两个字符串的 效果相同。代码如下所示。 • var str1:String = "hello"; • var str2:String = new String("hello"); • 要注意的是,在使用字符串文本创建字符串时,双引号和单引号不能混用。也就是 说,要使用双引号,一直使用双引号;要使用单引号,一直使用单引号。下面示例的 两种创建字符串文本的方式是错误的,代码如下所示。 • var str1:String="an incorrect string'; • var str2:String= 'an other incorrect string"; 16.2.2 定义含有转义字符的字符串 • 在ActionScript 3.0中,使用双引号和单引号将 字符“引”起来,表示这是一个字符串。字符串 从一个引号开始,到下一个引号结束,也就是引 号需要成对出现。但是若在字符串中间出现引 号,就会认为字符串已经结束,后面的部分不再 是字符串的一部分,或者组成了新的字符串。这 样就和要实现的目的出现了偏差,会造成编译器 在编译时就不能通过。 • 下面的示例创建的字符串就是错误的,代码如下 所示。 • var str:String=”这是一个错误的字符串,”不 能正确使用”,编译器会报错” 16.3 处理字符串 • 处理字符串,主要针对字符串的应用进行相关的 处理。本节主要涉及的处理包括字符串的连接、 在字符串中搜索、截取字符串、字符串的大小写 转换等。 16.3.1 字符串连接 • 在ActionScript 3.0中,有三种方式可以实现字 符串的连接:使用+连接操作符、使用+=自赋值连 接操作符和String.concat()方法。 • 1.+连接符连接字符串 • 使用+连接符可以连接字符串 • 2.+=自赋值连接符追加字符串 • 使用+=自赋值连接符可以实现在字符串的尾部追 加字符串。 • 3.String.concat()方法 • 使用String.concat()方法也可以把指定的字符串 追加到原字符串的后面,并返回一个新的字符 串,原字符串的值并不发生改变 16.3.2 搜索字符串 • 在ActionScript 3.0中,实现字符串搜索的方法有两种, 分别为:String.indexOf()方法和String.lastIndexOf() 方法。 • 1.indexOf()方法 • indexOf()方法实现从字符串的起始位置开始,正向搜索字 符串,返回搜索到字符串的位置索引。其用法格式如下所 示。 • indexOf(str,startIndex) • 2.lastIndexOf()方法 • lastIndexOf()方法实现从字符串的尾部位置开始,逆向搜 索字符串,返回搜索到字符串的位置索引。其用法格式如 下所示。 • lastIndexOf(str,startIndex) 16.3.3 删除或者替换字符串 • 在ActionScript 3.0中提供了对字符串进行查找 并替换的方法replace()。replace()方法能够实 现用一个新的字符串替换原有字符串中指定的字 符串,若查找的字符串不存在,则不替换。其用 法格式如下所示。 • replace(str1,str2) • 说明:此方法将返回一个新的字符串,原始字符 串仍保持不变,没有修改。 • 参数说明如下: • str1:要查找的字符串。 • str2:用于替换的字符串。 16.3.4 截取字符串 • 在ActionScript 3.0中,提供了三种方法实现在字符串中截取出一部分作 为子字符串,分别为:substring()方法、substr()方法和slice()方法。 • 这三种方法都能实现从原始字符串中截取一部分字符串而不影响原字符串 的值,区别在于截取的方法不同,方法的参数不同。 • 1.substring()方法:substring()方法根据指定的起始位置和结束位置, 截取两个位置索引中间的一部分字符串作为子字符串。其用法格式如下所 示。 • substring(startIndex,endIndex) • 2.substr()方法:substr()方法根据指定的位置和截取的长度值来截取字 符串。其用法格式如下所示。 • substr(startIndex,len) • 3.slice()方法:此方法与substring()方法类似,也是根据指定的起始位 置和结束位置,截取两个位置索引中间的一部分字符串作为子字符串。其 用法格式如下所示。 • slice(startIndex,endIndex) 16.3.5 字符串转数组 • 使用split()方法实现将字符串分隔成为数组,但要求字符 串中必须有统一的分隔符。比如:逗号,~号,§号等 等。 • 其用法格式如下所示。 • split(str,limit) • 此方法将返回一个新的数组。 • 参数说明如下: • str:用来作为分隔符的字符串,可以是标点符号,也可以 是空格,也可以是其它的字符。如果没有设置分隔符,则 把整个字符串作为数组的一个元素。 • limit:要放入数组中的最大项数。默认为允许的最大值。 16.3.6 大小写转换 • 在ActionScript 3.0中,提供了字母大小写转换的方法,分别为: toUpperCase()方法和toLowerCase()方法。 • toUpperCase()方法实现将字符串中的小写字母转换为大写字母,并返回 一个新的字符串。 • toLowerCase()方法实现将字符串中的大写字母转换为小写字母,并返回 一个新的字符串。 • 下面的示例使用这两种方法实现字母的大小写转换,代码如下所示。 • //创建一个字符串 • var str:String="This is my Book" • trace(str)//输出:This is my Book • //字符串转大写 • var str1:String=str.toUpperCase() • trace(str1)//输出:THIS IS MY BOOK • trace(str)//输出:This is my Book • //字符串转小写 • var str2:String=str.toLowerCase() • trace(str2)//输出:this is my book • trace(str)//输出:This is my Book 第17章 正则表达式 • 在ActionScript 3.0中引入了强大的字符串处理 工具――正则表达式。正则表达式主要用于验证 文本字段的值是否符合特定模式,比如验证用户 输入的电话号码位数是否正确;或者替换与特定 模式匹配的部分文本值。 • 本章将介绍正则表达式是什么,怎么使用,并介 绍一些常见的正则表达式的写法。 17.1 正则表达式概述 • 正则表达式常常被错误的认为是只有少数人理解 的一种神秘语言。的确,表面上正则表达式看起 来杂乱无章,如果不了解相关的语法知识,那么 代码在就像一堆杂乱无章的字符堆积而已。事实 上,正则表达式是非常简单并且可以被理解的。 通过本节的学习,你将了解正则表达式的基本概 念和基本构成,对正则表达式有一个基本的认 识。 17.1.1 什么是正则表达式 • 正则表达式最早是由数学家Stephen Kleene在对自然语言 的递增研究成果的基础上,于1956提出来的。具有完整语 法的正则表达式,主要使用在字符串的格式的匹配方面 上,后来也逐渐应用到信息技术领域。不同的编程语言对 于正则表达式有细微的不同,ActionScript 3.0是按照 ECMAScript第3版语言规范(ECMA-262)中的定义实现正则表 达式。 • 熟悉windows操作系统读者,应该知道windows中是怎样查 找文件的。不错,使用通配符“*”用来匹配任意字符, “?”用来匹配一个字符,来实现搜索功能的。比如使用 text?.txt来搜索的话,可以找到: 17.1.2 一个简单的正则表达式实例 • 看一段正则表达式的代码可能觉得很复杂,实际上如果明 白其规律,则就很容易理解了。 • 下面先来看一段简单的字符串查找替换的正则表达式示 例,实现从一段文字中查找文字“正则表达式”,并把它 替换成“regEXP”,代码如下所示: • var str:String= "字符串查找替换的正则表达式示例,实 现从一段文字中查找文字正则表达式,并把它替换成 regEXP"; • var pattern:RegExp = /正则表达式/; • var repstr="regEXP" • trace(str.replace(pattern,repstr));// 输出:字符串 查找替换的regEXP示例,实现从一段文字中查找文字正则 表达式,并把它替换成regEXP 17.1.3 正则表达式的构成 • 正则表达式一般由两个部分组成。一部分是在双斜杠内部 的字符串,称为匹配模式,用来表示要匹配的字符串的特 征;另一部分是在第二个斜杠的后面,是一个字母,叫做 正则表达式的标志位,由五个字母组合而成,具体请参见 17.2.5节。 • 匹配模式由两部分组成,分别为:普通字符(例如字符a到 z)和特殊字符(称为元字符)。正则表达式描述在查找字 符串时待匹配的一个或多个字符串。正则表达式作为一个 模板,将某个字符模式与所搜索的字符串进行匹配。 • 正则表达式的定义方法有两种,一种是上例中的方法,使 用双斜杠来定义,语法格式如下所示: • var 正则表达式:RegExp=/匹配模式/标志位 17.2 正则表达式的语法 • ActionScript 3.0中的正则表达式是按照 ECMAScript第3版语言规范(ECMA-262)中语言规范 的定义的。在实际应用过程中,正则表达式都比 较复杂。不过复杂的正则表达式都是按照一定的 语法规则组合而成。本节将介绍正则表达式的语 法知识。 17.2.1 正则表达式中的普通字符 • 正则表达式中的普通字符,包括大小写英文字母,从0到9的数字 和除了元字符的其它字符,比如#、!等。注意,中文也属于普 通字符,不过它在正则表达式中使用Unicode码表示。由普通字符 组成的正则表达式是简单的正则表达式。 • 下面是几个使用普通字符的正则表达式,代码如下所示: • //使用英文字母作为正则表达式匹配模式 • var pattern1:RegExp = /hello/; • //使用中文字符作为正则表达式匹配模式 • var pattern2:RegExp = /正则/; • //使用中英文混合字符作为正则表达式匹配模式 • var pattern3:RegExp = /正则hello/; • //使用符号和英文字母作为正则表达式匹配模式 • var pattern4:RegExp = /#hello~/; 17.2.2 正则表达式中的元字符 • 正则表达式中定义了一些具有特殊含义的字符, 这些字符在正则表达式中有特殊的含义,称为元 字符。ActionScript 3.0中的元字符如表17-1所 示: • 1.匹配字符串头部字符 • 2.匹配字符串尾部字符 • 3.反斜杠转义字符 • 4.匹配单个字符 • 5.数量表示符 • 6.逻辑“或”操作符 17.2.3 正则表达式中的元序列 • 元序列是指在ActionScript 3.0中具有特殊含义的字符序列。 ActionScript 3.0中的元序列如表所示: 元序列 元序列 说 明 {n}{n,} 和{n,n} 指定前一项目的数值数量或数量范围,属于数量标识符。 \b 匹配单词字符和非单词字符之间的位置。 \B 匹配两个单词字符之间的位置,也匹配两个非单词字符之间的位置。 \d 匹配十进制数字。 \D 匹配除数字以外的任何字符。 \f 匹配换页符。 \n 匹配换行符。 \r 匹配回车符。 \s 匹配任何空白字符(空格、制表符、换行符或回车符)。 \S 匹配除空白字符以外的任何字符。 \t 匹配制表符。 \unnnn 匹配字符代码由十六进制数字 nnnn 指定的 Unicode 字符。 \v 匹配垂直换页符。 \w 匹配单词字符(A-Z、a-z、0-9 或 _)。请注意,\w 不匹配非英文字符,如 é、Ò 或 Á。 \W 匹配除单词字符以外的任何字符。 \xnn 匹配具有指定 ASCII 值(由十六进制数字 nn定义)的字符。 17.2.4 正则表达式中的字符类 • 字符类是指定义的一组字符以匹配正则表达式中的一个位置。此类使用元 字符方括号[和]来定义。例如,下面的正则表达式定义了匹配mat、mbt、 mct、mdt或met的字符类: • /m[abcde]t/ • 字符类实现了字符类中只有一个字符符合特征要求,那么就能够实现字符 串的匹配。下面示例实现字符类的匹配操作,代码如下所示: • //定义要检测的字符正则表达式 • //检查字符串中是否存在正×则 • var pattern1:RegExp = /正[123]则/g; • //要检测的字符串 • var str1:String="正1则表达式/是一段检测代码,可以是正2则" • //使用String类的match()方法验证,match()方法具体用法见17.3.2节 • trace(str1.match(pattern1))//输出:正1则,正2则 • trace(str1.match(pattern1).length)//输出:2,说明有2个匹配 17.2.5 正则表达式中的标志位 • 标志指指定有关应如何使用正则表达式模式的一 些选项,如是否区分大写和小写字符等。这些标 志对应与正则表达式类的属性。在 ActionScript3.0中有5个标志位,如表所示: 正则表达式的标志位 标志 属性 说 明 gglobal匹配多个匹配。 i ignoreCa se 不区分大小写的匹配。应用于 A-Z 和 a-z 字符,但不能应用于扩展字符,如É和é。 m multiline 设置此标志后,$ 和 ^ 可以分别匹配行的开头和结尾。 s dotall 设置此标志后,.(点)可以匹配换行符 (\n)。 x extende d 允许扩展的正则表达式。 17.3 正则表达式的用法 • 在ActionScript3.0中,要搜索和检测正则表达 式,既可以利用RegExp类的方法来实现,也可以 利用String类的方法类来实现。本节将介绍利用 这两个类的方法来操作正则表达式的示例。 17.3.1 RegExp类 • RegExp类是ActionScript 3.0中的顶级类,它允 许使用正则表达式在字符串中执行搜索和替换文 本的模式。其有7个属性,如表所示: 正则表达式类属性 属性 返回类型 说明 dotall Boolean 指定正则表达式模式中的点字符(.)是否与换行符相匹配。 extende d Boolean 指定是否为正则表达式使用扩展模式。 global Boolean 指定是否为正则表达式使用全局匹配。 ignoreCa se Boolean 指定正则表达式是否忽略大小写。 lastIndex Number 指定字符串中开始进行下一次搜索的索引位置。 multiline Boolean 指定是否设置了 m(多行)标志。 source String 指定正则表达式的模式部分。 17.3.2 String类的方法应用 • String类与正则表达式的结合,能够实现更为丰 富的匹配和搜索效果。在ActionScript 3.0中, String类的search()方法、match()方法和 replace()方法常用于正则表达式操作。本节将介 绍这三种方法与正则表达式的综合应用。 • search()方法主要用于查找作业,返回搜到的字 符串的位置索引;match()方法实现的是匹配作 业,返回的是匹配的字符串;replace()方法实现 替换作业,返回的是替换的结果。 17.4 几种常用的正则表达式 • 在实际应用中,很多地方都要用到正则表达式来 进行匹配验证操作。特别是在进行表单验证的时 候,需要验证的格式很多,比如验证用户名是否 符合规范,姓名是不是中文,email格式是否正 确,是否是正确的身份证号码等等。本节将介绍 这些常用的正则表达式,并进行简单的验证匹配 操作。 17.4.1 正则表达式测试场景 • 在介绍正则表达式之前,先创建一个表单验证场 景。首先创建一个初始化场景的显示对象类,继 承自Sprite显示对象。此类将实现在舞台上形成 完整的登陆场景。Initcheck类代码如下所示: 验证界面 17.4.2 匹配中文字符 • 在验证表单的过程中,很多时候对输入的文本要求都是输入中 文。比如验证输入姓名,中国的地名等等。实现中文字符的验证 需要用到元序列“\unnnn”,其中“\u”表示要匹配字符Unicode 代码,后面的四位指16进制的Uincode字符。中文字符对应的 Unicode字符范围位4e00到9fa5。所以要验证中文字字符,需要匹 配的正则表达式位[\u4e00-\u9fa5]。 验证中文字符 17.4.3 匹配用户名 • 在输入表单中,用户名一般要遵循下面的规则: 以字母开头,长一般为5到16个字符,其中包含大 小写字母、数字和下划线组成。要实现这个规 则,正则表达式表示如下所示: 验证用户名 17.4.4 匹配货币数字 • 通常情况下,货币的数字,也就是金额为一数值类型,其 包括小数。如10.25元。其正则表达式表示如下所示: • /^\d+(\.\d+)?$/ • 说明:^\d+表示第一个字符为十进制数字,可以重复多 次;(\.\d+)?表示中间可以匹配小说点,小数点后可以有 数字,此比分可以重复0次或多次。 匹配货币数字 17.4.5 匹配email地址 • 在数据录入的过程中,通常要要对email地址进行判断。 email地址的格式分为两部分:一部分为“@”字符之前的 部分,是email地址的帐号,由一些字符组成;“@”后面 的一部分为邮件服务器的域名,要包含一个“.”点号。其 正则表达式表示如下所示: • /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([.-]\w+)*/ • 说明:\w+([-+.]\w+)*用于验证@前面的部分,信箱的帐 号,由单词字符和“-”“+”“.”组成。\w+([- .]\w+)*\.\w+([.-]\w+)*用于验证@后面的部分,邮件服务 器的域名,中间由一个“.”号,在使用中要用转义符进行 转义。 17.4.6 匹配网址 • 在表单录入的过程中,通常要要对网站URL地址进 行判断。通用的网址格式如: http://www.flasc.cn。当然,有些时候可能简写 为www.flasc.cn。本书提供的检测方法用来检测 通用的网址, 其正则表达式如下所示: • /(http:\/\/)?[^\s]/; • 说明:/(http:\/\/)?用于验证是否存在 “http://”,此验证重复零次或一次;[^\s]用 来匹配除空白字符串以外的任何字符。 17.4.7 匹配ip地址 • ip地址很简单,用三个点分开四个数字,如: 193.168.0.189。简单检测ip地址的正则表达式如下所示: • /\d+\.\d+\.\d+\.\d+/; • 说明:\d+表示十进制的数字,可以重复;\.用于转义 “.”点号。 匹配ip地址 17.4.8 匹配电话号码 • 在表单输入的时候,有时需要输入电话号码。国内的电话 号码有两部分,区号和主机号码,区号和主机号码之间使 用“-”连接。其中区号时3位或4位数字,主机号是4位到8 位的数字。国内电话号码的正则表达式如下所示: • /\d{3}-\d{8}|\d{4}-\d{7}/; 匹配电话号码 17.4.9 匹配身份证号码 • 在表单验证过程中,身份证也是常有的一项输入内容。身 份证号码也需要验证,要验证身份证号码,需要知道身份 证号码的编码规则。下面的给出最新的18位居民身份证的 编码规则: • aa bb cc yyyymmdd nnn r • 规则说明如下: • aa:表示省份编码。 • bb:表示省内地区编码。 • cc:表示地级县市编码。 • yyyymmdd:表示出生年月日。 • nnn:表示同一地区出生年月日相同的人的序号。 • r:表示校验码,数组0到10,由于10有两位,所以用X代 替。 第18章 位图和滤镜 • 在ActionScript 3.0中加入了对位图的支持,可 以实现创建位图图像,也可以把外部的位图图像 加载到Flash中利用滤镜类,可以对Flash元件和 位图增加各种滤镜效果。结合位图和滤镜类,可 以实现访问和更改各个像素值的功能,也可以创 建自己的滤镜式图像效果并使用内置杂点功能创 建纹理和随机杂点。 18.1 位图 • 计算机系统中支持的图像主要分为两类:矢量图 形和位图图像。本节将介绍位图的基础知识,以 及在ActionScript 3.0中所提供的位图处理包的 相关内容。 18.1.1 位图基础 • 矢量图形由以数学方式生成的几何形状,如直线、曲线和 多边形等基本图形组成,在Adobe Flash CS3中创作的图像 属于矢量图形。位图图像也称为光栅图像,由排列为矩形 网格形式的小方块,也就是像素组成,在Adobe PhotoShop CS3中创作的图像属于位图图像。 • 位图图像是用图像的宽度和高度来定义,以像素为量度单 位。其中像素是指位图图像中的最小信息单位,表示在屏 幕中显示的单个不同颜色的点。每个像素由对应的颜色值 来表示。在使用RGB颜色表示的位图图像中,像素由红、绿 和蓝三个字节组成,每个字节包含一个0到255之间的数 字。将三个字节合并成为一个颜色值,应用于显示对象, 就能够产生与绘画颜色相似的颜色。 18.1.2 Bitmap类 • Bitmap类用来表示位图图像的显示对象。这些图像可以是使用显 示对象的Loader类加载的外部图像,也可以是使用Bitmap()构造 函数创建的图像。Bitmap类创建的图像,其信息可以使用其 BitmapData属性来引用并处理。Bitmap对象是一种显示对象,因 此可以使用显示对象的属性和方法来进行操作和控制。此外, Bitmap对象还有两个常用的属性:PixelSnapping象素贴紧和 smoothing平滑。 • PixelSnapping象素贴紧属性用于控制Bitmap对象是否贴紧至最近 的像素。PixelSnapping属性包括以下可能值: • PixelSnapping.NEVER:不进行像素贴紧。 • PixelSnapping.ALWAYS:图像始终与最近的像素贴紧,与变形无 关。 • PixelSnapping.AUTO:如果绘制图像时未应用旋转或倾斜效果, 并且图像是以99.9%到100.1%的缩放系数绘制的,则图像将与最近 的像素贴紧。 18.1.3 BitmapData类 • BitmapData类用于处理Bitmap对象的像素数据,也可以使用 BitmapData类的方法创建任意大小的透明或不透明位图图像,并 在运行时采用多种方式操作这些图像。此类还可以访问使用显示 对象的Loader类加载的位图图像的BitmapData值。 • BitmapData类的表18-1 BitmapData类属性 • 属性数据类型说 明heightint位图图像的高度,以像素为单位。 只读属性。rectRectangle定义位图图像大小和位置的矩形。只读 属性。transparentBoolean定义位图图像是否支持每个像素具有 不同的透明度。只读属性。widthint位图图像的宽度,以像素为 单位。z属性有4个,如表所示: BitmapData类属 性 属性 数据类型 说明 height int 位图图像的高度,以像素为单位。只读属性。 rect Rectangle 定义位图图像大小和位置的矩形。只读属性。 transparen t Boolean 定义位图图像是否支持每个像素具有不同的透明度。只读属性。 width int 位图图像的宽度,以像素为单位。 18.1.4 创建位图 • 创建位图,需要把Bitmap类和BitmapData类结合使用。使 用Bitmap类创建位图对象,使用BitmapData类创建Bitmap 对象的数据信息,最后使用Bitmap对象的构造函数或 bitmapdata属性获得BitmapData创建的数据。 • Bitmap类的构造函数格式如下所示: • Bitmap(bitmapData,pixelSnapping,smoothing) • 参数说明如下: • bitmapData:被引用的BitmapData对象数据。默认值为 null。 • pixelSnapping:确定Bitmap对象是否贴紧至最近的像素。 默认值为“auto”。 • smoothing:确认在缩放时是否对位图进行平滑处理。默认 值为false。 18.1.5 加载外部图像 • 在ActionScript 3.0中支持加载外部的位图图像到位图中。加载外部的图 像,需要使用显示对象的Loader类的load方法来实现。具体实现请参见 22.1节。 • 下面的示例使用Loader对象,从外部加载一幅位图图像,并把它加入到 Bitmap位图对象上。使用文档类:LoadImage,代码如下所示: 加载外部图像 18.2 处理像素 • 在ActionScript 3.0中,利用BitmapData类的方 法,既可以处理单个像素点,又可以处理像素数 组。本节将介绍处理单个和多个像素的方法。 18.2.1 获取单个像素 • 在使用像素处理位图图像时,首先需要获取要处理区域中 所包含的像素的颜色值。在ActionScript 3.0中,可以使 用getPixel()方法从指定坐标点(x,y)中获取RGB颜色 值。若需要获得包括透明度Alpha通道信息,则需要使用 getPixel32()方法。 • getPixel()方法用于获取位图指定点的RGB像素值。其用法 格式如下所示: • getPixel(x:int, y:int) • 说明:此方法将返回一个整数,表示BitmapData对象中在 某个特定点(x, y)处的RGB像素值,如果(x,y)坐标在图 像范围之外,则返回0。 • 参数说明如下: • x:像素点的x坐标位置。 • y:像素点的y坐标位置。 18.2.2 设置单个像素 • 若要想更改位图中包含的某个像素的颜色或透明 度,则可以使用setPixel()方法或setPixel32() 方法。若要设置像素的颜色,则这两种方法都可 以使用。 • setPixel()方法用于设置BitmapData对象的单个 像素值。此方法会保留图像像素的当前Alpha通道 值。其用法格式如下所示: • setPixel(x:int, y:int, color:uint) • 参数说明如下: • x:指定要更改的像素点的x坐标位置。 • y:指定要更改的像素点的y坐标位置。 • color:指定像素点要改变成的RGB颜色值。 18.2.3 处理像素数组 • 若要获取一个区域的像素而不是单个像素的值,可以使用 getPixels()方法来实现。其用法格式如下所示: • getPixels(rect:Rectangle) • 参数rect表示当前BitmapData对象中的一个矩形区域,返回的结 果是表示给定矩形对象中的像素的字节数组。字节数组的每个元 素,即像素值都是无符号的整数(32位未经相乘的像素值)。 • 相反,若要更改一组像素值,可以使用setPixels()方法来实现。 其用法格式如下所示: • setPixels(rect:Rectangle, inputByteArray:ByteArray) • 此方法实现将字节数组转换为像素数据的矩形区域。字节数组中 的数据应该是32位ARGB像素值。 • 参数说明如下: • rect:指定应用像素设置的BitmapData对象的矩形区域。 • inputByteArray:字节数组对象,由要在矩形区域中使用的32位 未经过相乘的像素值组成。 18.3 位图的复制 • 位图复制就是将一个位图的数据复制到另一个位 图图像。在ActionScript 3.0中,BitmapData类 提供了4种位图复制的方法,分别为:clone()方 法、copyPixels()方法、copyChannel()方法和 draw()方法。 18.3.1 clone()方法 • clone()方法用于实现对原位图对象的克隆效果,此方法将产生一个与原 位图完全相同的副本。其用法格式如下所示: • clone() • 注意:复制产生的副本的修改并不影响原位图的效果。 • 下面的示例使用clone()方法实现载入一个外部的位图,并进行复制操 作。使用文档类:Clone,代码如下所示: 克隆位图 18.3.2 copyPixels()方法 • copyPixels()方法用于将目标位图对象的BitmapData数据按照指 定的坐标和矩形区域进行复制,并将复制出的数据作用于另一个 位图对象。其用法格式如下所示: • copyPixels(sourceBitmapData,sourceRect,destPoint,alphaBit mapData,alphaPoint,mergeAlpha) • 参数说明如下: • sourceBitmapData:要从中复制像素的目标位图图像。该图像是 一个BitmapData实例,也可以指自身BitmapData实例。也就是可 以从自身复制一部分。 • sourceRect:表示要从目标图像获得区域的矩形。 • destPoint:表示将在其中放置新像素的矩形区域的左上角。 • alphaBitmapData:表示AlphaBitmapData对象源。 • alphaPoint:Point:AlphaBitmapData对象源中与sourceRect参数 的左上角对应的点。 • mergeAlpha:若要使用Alpha通道,请将该值设置为true。 18.3.3 copyChannel()方法 • copyChannel()方法实现将一个Bitmapdata对象中某一个通 道的数据复制到另一个Bitmapdata对象的某个通道当中。 其用法格式如下所示: • copyChannel(sourceBitmapData,sourceRect,destPoint,s ourceChannel,destChannel) • 参数说明如下: • sourceBitmapDat:要使用的目标位图图像。此图像可以是 自身图像,也可以是另一个图像。 • sourceRect:指定要从源图像中复制的矩形Rectangle对 象。最大不能超过源图像。 • destPoint:获取数据位置的目标Point对象,表示要在其 中放置新通道数据的矩形区域的左上角。 • sourceChannel:源通道。 • destChannel:uint:目标通道。 18.3.4 draw()方法 • draw()方法可以实现使用Flash Player矢量渲染器在位图图像上绘制源显 示对象。而且可以指定矩阵颜色转换和混合模式和目标区域参数来控制呈 现的执行方式。此外还可以根据需要指定是否应在缩放时对位图进行平滑 处理。其用法格式如下所示: • draw(source,matrix,colorTransform,blendMode,smoothing) • 参数说明如下: • source:目标位图,指要绘制到BitmapData对象的显示对象或BitmapData 对象。 • matrix:矩阵对象,用于缩放、旋转位图或转换位图的坐标。默认值为 null。 • colorTransform:颜色转换对象,用于调整位图的颜色值。默认值为 null。 • blendMode:指定要应用于所生成位图的混合模式。默认值为null。 • clipRect:矩形对象,定义要绘制的源对象的区域。默认值为null。 • smoothing:用于确定因在matrix参数中指定缩放或旋转而对BitmapData 对象进行缩放或旋转以后,是否对该对象进行平滑处理。默认值为 false。 18.4 使用杂点功能 • 杂点功能用于实现在屏幕上实现类似于电视上 “雪花”这样的效果。此类效果一般可以用于背 景图像,也可以在动画制作过程中实现动态切换 效果。在ActionScript 3.0中有两种方法可以实 现此效果,分别为:noise()方法和perlinNoise() 方法。 18.4.1 noise()方法 • noise()方法可以实现对位图应用杂点效果,实现对位图图像的指定区域 中的像素应用随机颜色值。其用法格式如下所示: • noise(randomSeed,low,high,channelOptions,grayScale) • 参说说明如下: • randomSeed:随机整数,用于决定图案的随机种子数。要实现真正的随机 结果,通常使用Math.random()方法为此参数传递随机数字。 • low:整数,指明要为每个像素生成的最低值(0至255)。默认值为0。此 参数将决定产生的杂点的明暗程度,参数越大,亮度越高。 • high:整数,指明要为每个像素生成的最高值(0至255)。默认值为 255。此参数同样将决定产生的杂点的明暗程度,参数越大,亮度越高。 • channelOptions:整数,指明将向位图对象的哪个颜色通道应用杂点图 案。此数字可以是四个颜色通道ARGB值的任意组合。默认值是7。 • grayScale:设置为true时,此参数对位图像素应用randomSeed值,可有 效地褪去图像中的所有颜色。此参数不影响Alpha通道。默认值为false。 18.4.2 perlinNoise()方法 • perlinNoise() 方法可以创建更好的有机外观纹理效果,此方法 可以生成逼真、有机的纹理,是用于烟雾、云彩、水、火或爆炸 的理想图案。其用法格式如下所示: • perlinNoise(baseX,baseY,numOctaves,randomSeed,stitch,frac talNoise:,channelOptions,grayScale,offsets) • 参数说明如下: • baseX:用于决定创建的图案的x大小的值。 • baseY:用于决定创建的图案的y大小的值。 • numOctaves:用于组合以创建此杂点的octave 函数或各个杂点函 数的数目。octave数目越大,创建的图像越精细,但处理时间会 更长。 • randomSeed:随机种子数的功能与在noise()函数中的功能完全相 同。获取随机种子数,尽可能的使用Math.random()方法实现。 • stitch:如果设置为true,此方法将尝试缝合或者平滑图像的过 渡边缘以形成无缝的纹理,用于作为位图填充进行平铺。 18.4.2 perlinNoise()方法 • fractalNoise:此参数用于控制生成的渐变的边缘效果。 如果设置为true,则此方法生成的碎片杂点会对效果的边 缘进行平滑处理。如果设置为 false,则将生成湍流。带 有湍流的图像具有可见的不连续性渐变,可以使用它处理 更接近锐化的视觉效果。 • channelOptions:channelOption参数的功能与在noise() 方法中的功能完全相同。此数字可以是四个颜色通道ARGB 值的任意组合。默认值是7。 • grayScale (Boolean):grayScale 参数的功能与在 noise() 方法中的功能完全相同。设置为true时,此参数 对位图像素应用randomSeed值,可有效地褪去图像中的所 有颜色。此参数不影响Alpha通道。默认值为false。 • offsets:对应于每个octave的x和y偏移的点数组。通过处 理偏移值,可以平滑滚动图像层。偏移数组中的每个点将 影响一个特定的 octave 杂点函数。默认值为null。 18.5 位图应用效果 • 使用Bitmap和BitmapData类处理位图可以实现很 多不同的效果,本节将介绍使用scoll()方法实现 滚动位图效果和使用pixelDissolve()方法实现像 素溶解的效果。 18.5.1 滚动位图效果 • 在实际应用的过程中,位图常常需要滚动显示, 比如大的图片显示,地图显示等等。要实现此效 果,可以直接使用BitmapData类的scroll()方法 来实现。其用法格式如下所示: • scroll(x:int, y:int) • 参数说明如下: • x:表示水平滚动量的一个整数。 • y:表示垂直滚动量的一个整数。 18.5.2 像素溶解效果 • 在ActionScript 3.0中提供了一种位图切换的效果――像素溶 解。该效果使用pixelDissolve()方法来实现,其用法格式如下所 示: • pixelDissolve(sourceBitmapData,sourceRect,destPoint,rando mSeed,numPixels,fillColor) • 参数说明如下: • sourceBitmapData:输入的目标位图图像。源图像可以是另一个 BitmapData对象,也可以引用当前BitmapData实例。 • sourceRect:定义要用作输入的源图像区域的矩形。 • destPoint:目标图像中与源矩形的左上角对应的点。 • randomSeed:int:用于开始像素溶解的随机种子数目。 • numPixels:每块溶解区域对应的大小,默认值是源区域(宽度x 高度)的1/30。 • fillColor:uint:一个ARGB颜色值,用于填充其源值等于目标值 的像素。 18.6 滤镜类及应用 • 在ActionScript 3.0中加入了滤镜类,使用滤镜 类,可以实现改变颜色、形状、大小、旋转或其 它显示效果。本节将终点讲述滤镜类及其用法。 18.6.1 滤镜类 • 在ActionScript 3.0中所提供的滤镜都位于flash.filters包中, 这些滤镜既可以用于在Flash中创作的显示对象,也可以用于位图 对象。使用滤镜可以应用丰富的视觉效果来显示对象,实现模 糊、斜角、发光和投影等效果。 • 常用的滤镜类有6中,如表所示: 常见滤镜效果 滤镜类 说明 BlurFilter 可使用BlurFilter类将模糊视觉效果应用于显示对象。 ConvolutionFil ter ConvolutionFilter类应用矩阵盘绕滤镜效果。 DropShadowFi lter 可使用DropShadowFilter类向显示对象添加投影 GlowFilter 使用GlowFilter类可以对显示对象应用发光效果。 GradientBevel Filter 使用GradientBevelFilter类可以对显示对象应用渐变斜角效果。 GradientGlow Filter 可使用GradientGlowFilter类对显示对象应用渐变发光效果。 18.6.2 投影效果 • 在ActionScript 3.0中,可使用DropShadowFilter类向显示对象添加 投影效果。其用法格式如下所示: • DropShadowFilter(distance,angle,color,alpha,blurX,blurY,stren gth,quality,inner,knockout,hideObject) • 参数说明如下: • distance:表示阴影的偏移距离,以像素为单位。默认值为4。 • angle:表示阴影的倾斜角度,用0到360度的浮点数表示。默认值为 4.5。 • color:表示阴影颜色,采用十六进制格式0xRRGGBB。默认值为 0x000000,黑色。 • alpha:表示阴影颜色的Alpha透明度值。有效值为0到1.0。默认值为 1。 • blurX:水平模糊偏移量。有效值为0到255的浮点数。默认值为4。 • blurY:垂直模糊偏移量。有效值为0到255.0的浮点数。默认值为4。 18.6.2 投影效果 • strength:印记或跨页的强度。该值越高,压印的颜色越 深,而且阴影与背景之间的对比度也越强。有效值为0到 255。默认值为1。 • quality:滤镜的品质。也可以使用BitmapFilterQuality 常数:BitmapFilterQuality.LOW、 BitmapFilterQuality.MEDIUM和 BitmapFilterQuality.HIGH。 • inner:表示阴影是否为内侧阴影。值true指定内侧阴影。 值false指定外侧阴影。 • knockout:表示是否应用挖空效果(true),若应用,将有 效地使对象的填色变为透明,并显示文档的背景颜色。 • hideObject:表示是否隐藏对象本身。如果值为true,则 表示没有绘制对象本身,只有阴影是可见的。 18.6.3 发光效果 • 在ActionScript 3.0中,显示对象上应用GlowFilter类可以实现加亮效果,能够使显 示对象看起来像是被下方的灯光照亮,可创造出一种柔和发光效果。其构造函数用法 格式如下所示: • GlowFilter(color,alpha,blurX,blurY,strength,quality,inner,knockout) • 参数说明如下: • color:光晕颜色,采用十六进制格式0xRRGGBB。默认值为0xFF0000。 • alpha:颜色的Alpha透明度值。有效值为0到1。默认值为1。 • blurX:水平模糊偏移量。有效值为0到255的浮点数。以2的乘方值进行优化,呈现速 度比其它值更快。默认值为6。 • blurY:垂直模糊偏移量。有效值为0到255的浮点数。以2的乘方值进行优化,呈现速 度比其它值更快。默认值为6。 • strength:印记或跨页的强度。该值越高,压印的颜色越深,而且发光与背景之间的 对比度也越强。 有效值为0到255。默认值为2。 • quality:滤镜的品质。可使用BitmapFilterQuality常数: BitmapFilterQuality.LOW、BitmapFilterQuality.MEDIUM、 BitmapFilterQuality.HIGH。 • inner:指定发光是否为内侧发光。值true 指定发光是内侧发光。值false 指定发光 是外侧发光(对象外缘周围的发光)。 • knockout:指定对象是否具有挖空效果。值为true 将使对象的填充变为透明,并显 示文档的背景颜色。 18.6.4 浮雕效果 • 在ActionScript 3.0中,可以使用GradientBevelFilter类实现对显示对 象或BitmapData对象应用增强的斜角,以产生类似浮雕的效果。也可以在 斜角上使用渐变颜色可以大大改善斜角的空间深度,使边缘产生一种更逼 真的三维外观效果。其构造函数用法格式如下所示: • GradientBevelFilter(distance,angle,colors,alphas,ratios,blurX,bl urY,strength,quality,type,knockout) • 参数说明如下: • distance:偏移距离。有效值为0到8。默认值为4。 • angle:偏移角度,以度为单位。有效值为0到360。默认值为45度。 • colors:渐变中使用的RGB十六进制颜色值数组。 • alphas:colors数组中对应颜色的Alpha透明度值的数组。数组中每个元 素的有效值为0到1。 • ratios:颜色分布比例的数组;有效值为0到255。 • blurX:水平模糊量。有效值为0到255。如果模糊量小于或等于1,则表明 原始图像是按原样复制的。默认值为 4。采用2的乘方值进行优化,呈现 速度比其它值更快。 18.6.4 浮雕效果 • blurY:垂直模糊量。。有效值为0到255。如果模糊量小于或等于 1,则表明原始图像是按原样复制的。默认值为 4。采用2的乘方 值进行优化,呈现速度比其它值更快。 • strength:印记或跨页的强度。该值越高,压印的颜色越深,而 且斜角与背景之间的对比度也越强。 有效值为0到255。值为0表 示未应用滤镜。 • quality:滤镜的品质。可以使用BitmapFilterQuality常数: BitmapFilterQuality.LOW、BitmapFilterQuality.MEDIUM和 BitmapFilterQuality.HIGH。 • type:斜角效果的放置。可能的值为BitmapFilterType常数: BitmapFilterType.OUTER便是对象外缘上的斜角; BitmapFilterType.INNER表示对象内缘上的斜角; BitmapFilterType.FULL表示对象顶部的斜角。 • knockout:Boolean:指定是否应用挖空效果。值为true将使对象 的填充变为透明,并显示文档的背景颜色。 18.6.5 渐变发光效果 • 在ActionScript 3.0中,使用GradientGlowFilter类可以实现对显示对象 或BitmapData对象应用增强的发光效果。此方法还可以很好的控制发光颜 色,从而产生一种更逼真的发光效果。此外,渐变发光滤镜还可以实现在 对象的内侧、外侧或上侧边缘应用渐变发光。其构造函数用法格式如下所 示: • GradientGlowFilter(distance,angle,colorsl,alphas,ratios,blurX,bl urY,strength,quality,type,knockout) • 参数说明如下: • distance:光晕偏移距离。默认值为4。 • angle:偏移角度,以度为单位。有效值为0到360。默认值为45度。 • colors:渐变中使用的RGB十六进制颜色值数组。 • alphas:colors数组中对应颜色的Alpha透明度值的数组。数组中每个元 素的有效值为0到1。 • ratios:颜色分布比例的数组;有效值为0到255。 • blurX:水平模糊量。有效值为0到255。如果模糊量小于或等于1,则表明 原始图像是按原样复制的。默认值为 4。采用2的乘方值进行优化,呈现 速度比其它值更快。 18.6.5 渐变发光效果 • blurY:垂直模糊量。。有效值为0到255。如果模糊量小于或等于 1,则表明原始图像是按原样复制的。默认值为 4。采用2的乘方 值进行优化,呈现速度比其它值更快。 • strength:印记或跨页的强度。该值越高,压印的颜色越深,而 且斜角与背景之间的对比度也越强。 有效值为0到255。值为0表 示未应用滤镜。 • quality:滤镜的品质。可以使用BitmapFilterQuality常数: BitmapFilterQuality.LOW、BitmapFilterQuality.MEDIUM和 BitmapFilterQuality.HIGH。 • type:斜角效果的放置。可能的值为BitmapFilterType常数: BitmapFilterType.OUTER便是对象外缘上的斜角; BitmapFilterType.INNER表示对象内缘上的斜角; BitmapFilterType.FULL表示对象顶部的斜角。 • knockout:Boolean:指定是否应用挖空效果。值为true将使对象 的填充变为透明,并显示文档的背景颜色。 18.6.6 模糊效果 • 在ActionScript 3.0中,使用BlurFilter类可以对显示对象及其 内容具有涂抹或模糊的效果。模糊效果可以用于产生对象不在焦 点之内的视觉效果,也可以用于模拟快速运动,比如运动模糊。 其类构造函数用法格式如下所示: • BlurFilter(blurX:Number = 4.0, blurY:Number = 4.0, quality:int = 1) • 参数说明如下: • blurX:水平模糊量。有效值为0到255的浮点数。默认值为4。 • blurY:垂直模糊量。有效值为0到255的浮点数。默认值为4。 • quality:滤镜的品质。可以使用BitmapFilterQuality常数: BitmapFilterQuality.LOW、BitmapFilterQuality.MEDIUM和 BitmapFilterQuality.HIGH。 模糊效果 第19章 日期与时间 • 日期和时间是在ActionScript3.0编程过程中经常 使用的一种信息数据类型。在ActionScript 3.0 中,使用Date类来管理日期和时间,用于处理具 体的时刻;使用Timer类来处理时间间隔,也就是 时间段。Date类的实例中含有各个日期和时间单 位的值,其中包括年、月、日、星期、小时、分 钟、秒、毫秒以及时区等内容。Timer类可以设置 在一定延迟后执行动作,或按重复间隔执行默认 动作。 19.1 Date类 • 在ActionScript 3.0中,Date类是顶级类,用于 表示日期和时间信息。Date类的实例表示一个特 定时间点(时刻),也可以查询或修改该时间点 的属性,比如月、日、小时和秒等信息。 19.1.1 创建日期和时间 • 要创建一个日期和时间,需要使用Date类的构造 函数。使用此方法,可以构造一个新的Date对 象,并未该对象保存指定的日期和时间。依据对 构造函数指定的参数不同,可以使用不同的方法 来构建不同的日期和时间,具体有4种方式可以选 择。 • 1.不使用参数 • 2.使用Number类型数据为参数 • 3.使用String类型数据作为参数 • 4.使用Date对象的多个参数 19.1.2 获取时间值 • 在ActionSctipt 3.0中,可以使用Date类的属性或方法从 Date对象中提取各种时间单位的值。下面介绍常用的Date 属性用于获取Date对象中的一个时间单位的值: • fullYear:按照本机时间返回Date对象中的完整年份值, 用四位数表示。 • month:返回当前的月份,以数字格式表示,分别以0到11 表示一月到十二月。 • date:表示月中某一天的日历数字,范围从1到31 • day:以数字格式表示一周中的某一天,其中0表示星期 日,6表示星期六。 • hours:用于表示当前的小时数,范围从0到23。 • minutes:表示当前的分钟。 • seconds:表示当前的秒。 • milliseconds:表示当前的毫秒。 19.1.3 获取月份和星期 • 在ActionScript 3.0中,无论是使用day和months 属性,还是使用getDay()和getMonths()方法,获 取的星期和月份格式都与中国的使用习惯不同, 所以有必要对月份和星期进行处理,以实现更好 的使用效果。 • 要实现格式的转换,只用将中文的日期和星期与 getDay()和getMonths()方法获得的数据进行对 照,然后进行转换就可以实现。下面的示例先创 建两个数组,分别用于存储中文的月份星期,然 后使用getDay()和getMonths()方法获取星期和日 期之后进行对照,转换成中文的日期。 19.1.4 获取时间间隔 • 要获取两个时间之间的间隔值,可以通过Date对 象的time属性,获得两个时间分别相对于1970年1 月1日的毫秒数。然后利用两个数字相减,获取时 间间隔的毫秒数,最后通过计算,获取相应的时 间间隔的表示。 19.2 Timer类动画制作 • 在ActionScript 3.0中,使用Timer类作为Flash Player计时器的 接口。利用创建的的Timer对象,可以设置指定的时间顺序来执行 程序代码。 • 使用Timer对象,可以控制指定的代码运行一次或按指定间隔重复 运行一定的次数。Timer的刷新取决于SWF文件的帧频或Flash Player的工作环境,比如计算机的内存和CPU等。Flash Player会 能会按稍有偏差的间隔调度事件。 • Timer类有4个属性,3个方法,2个事件。下面来简单介绍这些属 性和方法。 • currentCount:计时器从0开始后执行代码的总次数。此属性在重 置计时器后,只计入重置后的执行次数。 • delay:计时器事件间以毫秒为单位的延迟时间。如果在计时器正 在运行时设置延迟间隔,则计时器将按相同的重复执行次数重新 启动计时器。 19.2 Timer类动画制作 • running:反映计时器的当前状态。如果计时器正在运行,则为 true,否则为false。 • reset()方法:如果计时器正在运行,则停止计时器,并将当前执 行次数属性设回为0,在调用start()方法后,将在此执行程序代 码。 • start()方法:启动计时器的方法。 • stop()方格:停止计时器。若在调用stop()后调用start(),则将 继续运行计时器实例,运行次数为剩余的重复次数。 • Timer事件:每当Timer对象达到根据delay属性指定的间隔时调 度。 • timerComplete事件:每当它完成repeatCount设置的执行次数后 调度此事件。 19.3 动态时钟实例 • 本节将使用Date类和Timer类,创建一个时钟效果。具体实 现原理过程如下: • (1)创建时钟和文本内容显示基本内容,包括表盘初始 化,指针初始化,文本显示时间初始化等操作,具体通过 Dtimer类来实现。代码如下所示: • (2)创建动态时钟和文字方式显示效果。此过程使用 Timer类的构造函数,控制每秒刷新一次屏幕,实现动态绘 制和显示。 动态时钟 第20章 声音编程 • 在Flash创建的引人入胜的动画效果当中,声音效 果是最容易让人忽略,却又是最吸引人的地方。 在动画创作中加入声音元素,能够使动画效果交 互性更强,效果更生动。比如可以在视频游戏中 添加声音效果,可以在应用程序用户界面中添加 音频回馈,甚至可以创建一个分析通过Internet 加载的mp3文件的程序。 • 本章将介绍何加载外部音频文件以及处理SWF中嵌 入的声音。还将介绍如何控制音频和从用户麦克 风捕获声音等内容。 20.1 声音编程介绍 • 在计算机中声音信息的表示形式被称为数字音频。计算机可以捕 获并编码数字音频以及对其进行存储和检索,进而可以通过连接 到计算机上的扬声器进行回放。使用Flash Player和 ActionScript结合,也能够实现音频文件的回放。 • 在ActionScript 3.0中,利用载入的数字音频数据,可以随意的 来控制声音的音量、或者立体声还是单声道声音。不过在 ActionScript 3.0中控制声音之前,需要先将声音信息加载到 Flash Player中。ActionScript 3.0提供了4种方法将音频数据加 载到 Flash Player 中,分别为: • 在运行时加载的外部声音文件。 • 在应用程序的 SWF 文件中嵌入的声音资源。 • 来自连接到用户系统上的麦克风的声音数据。 • 从远程媒体服务器流式传输的声音数据,如Flash Media Server。 20.1.2 Sound类 • Sound类用于在应用程序中使用声音。利用Sound 类创建新的Sound对象、将外部的MP3文件加载到 该对象并播放该文件、关闭声音流,以及访问有 关声音的数据,比如有关流中字节数和ID3元数据 的信息。 Sound类方法 方法 说明 close() 关闭该流,从而停止所有数据的下载。 load(stream,context) 启动从指定 URL 加载外部 MP3 文件的过程。 play(startTime,loops, sndTransform) 生成一个新的 SoundChannel 对象来回放该声音。 20.1.3 SoundChannel类 • SoundChannel类用于在应用程序中控制声音。在Flash应用程序 中,播放的每一个声音都被分配到一个声道,而且应用程序可以 具有混合在一起的多个声道。SoundChannel类还包含一个stop() 方法、几个用于监控声道幅度的属性,以及用于对声道设置 SoundTransform对象的属性。SoundChannel类共有4个属性,1个 方法,1个事件,具体内容如下。 • leftPeak:只读属性,表示左声道的当前音量幅度,范围从0(静 音)至1(最大音量)。 • position:只读属性,表示该声音中播放头的当前位置。 • rightPeak:只读属性,表示右声道的当前音量幅度,范围从0 (静音)至1(最大音量)。 • soundTransform:分配给该声道的SoundTransform对象。用于实 现音量的控制和调节。 • stop()方法:停止在该声道中播放声音。 • soundComplete事件:在声音完成播放后调度该事件。 20.1.4 SoundMixer类 • 如果在加载声音文件或视频文件数据的同时播放该文件,则认为 是流式传输。通常,将对从远程服务器加载的外部声音文件进行 流式传输,以使用户不必等待加载完所有声音数据再收听声音。 SoundMixer类就是用于控制嵌入的音频文件在传输声音流之前, 预先载入道缓冲区的时间。注意,此类只能控制动态加载的声音 文件,而不能控制嵌入道Flash Player中的声音文件。此类有2个 属性,3个方法,具体如下所示。 • bufferTime:表示在开始传输嵌入的声音流之前,将其预加载到 缓冲区中所用的秒数。 • soundTransform :控制全局声音属性的SoundTransform对象。 • areSoundsInaccessible():确定是否因安全限制而无法访问任何 声音,若无法访问,则返回false。 • computeSpectrum():获取当前声音波形的快照,并将其放在指定 的ByteArray对象数组中。 • stopAll():停止当前正在播放的所有声音。 20.2 播放和控制声音 • 要实现在Flash中播放声音,需要把声音文件加载 到Flash Player中。加载完之后,就可以利用 flash.media包中的类进行播放控制,实现相应的 播放效果。本节将首先介绍两种加载声音的方 法,然后介绍声音的播放控制和调节。 20.2.1 加载外部声音 • 要加载外部的声音文件,需要使用URLRequest类提供访问 外部音频文件的URL连接,然后创建Sound类的实例,然后 利用该类的构造函数使用URL作为参数加载外部的音频文 件。Sound类的构造函数用法格式如下所示。 • Sound(stream:URLRequest = null, context:SoundLoaderContext = null) • 参数说明: • stream:URLRequest连接地址,默认为空,指向外部MP3文 件的URL连接地址。 • context:SoundLoaderContext,音频文件载入的长度数 据。表示MP3数据保留在Sound对象的缓冲区中的最小毫秒 数。在开始播放以及在网络中断后继续回放之前,Sound对 象将一直等待直至至少拥有这一数量的数据才开始执行播 放操作。默认值为1000毫秒。 20.2.2 加载嵌入声音 • 并不是所有的声音文件都需要加载外部文件。在声音文件本身不 大,对生成的SWF文件大小影响不大的情况下,通常使用在Flash 中嵌入文件要比使用外部音频灵活性更强,更容易操作。下面的 实例介绍在Flash中嵌入声音并加载的方法,具体操作步骤如下所 示。 导入到库对话框 链接属性 20.2.3 播放、暂停和停止 • 加载完成的文件,在需要播放时,只要执行为Sound实例的 Sound.play()方法就可以实现,其用法格式如下所示。 • play(startTime:Number = 0, loops:int = 0, sndTransform:SoundTransform = null):SoundChannel • 说明:此方法将返回SoundChannel声音通道对象,用于控制声 音。如果没有声卡或用完了可用的声道,此方法将返回null。注 意:一次最多可以使用32个声道。 • 参数及返回说明: • startTime:以毫秒为单位的开始播放放的初始位置,默认为0, 也就是声音的头部。 • loops:定义在声道停止播放之前,声音循环播放的的次数。默认 为0,表示无限循环。 • sndTransform:分配给该声道的初始SoundTransform对象值,默 认为空。 20.2.4 显示播放进度 • 通常情况下,在播放音频文件的过程中,需要显示当前正在播放的音频文 件的进度值,也就是播放的百分比。利用的原理为:使用Sound类的 length属性获取当前音频的总长度;使用SoundChannel类的position属性 获取播放头在当前音频的位置,也就是当前播放的长度;然后二者的比值 就是当前播放进度值。 显示播放进度 20.2.5 控制音量 • 在ActionScript 3.0中,音量的控制,改变的是当前声音通道的 音量大小。要实现此效果,需要创建一个SoundTransform对象, 然后使用该对象的volume属性来改变SoundTransform对象的音量 值,并最后应用与声音通道。 • 下面的实例先创建一个Slider(滑块)组件,通过在滑块轨道的 端点之间移动滑块来调节音量的值。然后使用SoundTransform对 象来调节音量发生变化。使用文档类:SoundVolue,代码如下所 示。 控制声音音量 20.3 捕获声音输入 • 在ActionScript 3.0中提供了Microphone类拉捕 获输入的声音。不过此类主要用于服务器,如 Flash Media Server或Flex。不过在没有服务器 的情况下也可以使用Microphone类,只是在使用 上受到一定的限制。 20.3.1 Microphone类 • Microphone类主要用于捕获麦克风的声音,然后将捕获到的声音传递到服 务器进行保存。此类的常用属性有11种,如表20-5所示; Microphone类属 性 属性 数据类型 说明 activityLevel Number 麦克风正在检测的音量。 gain Number 麦克风在传送信号之前应该将信号放大的倍数。 index int 麦克风的索引,它反映在Microphone.names返回的数组中。 muted Boolean 指定用户是已经拒绝对麦克风的访问(true)还是已经允许对麦克风的访问 (false)。 name String 当前声音捕获设备的名称,它由声音捕获硬件返回。 names Array 所有可用的声音捕获设备的名称。 rate int 麦克风捕获声音的频率,单位是kHz。 silenceLevel Number 激活麦克风并调度activity事件所需的音量。 silenceTimeout int 麦克风停止检测声音的时间和调度activity事件的时间之间相差的毫秒数。 soundTransform SoundTransfor m 在此麦克风对象处于环回模式时,控制它的声音。 useEchoSuppressio n Boolean 若启用了回音抑制,则返回true;否则返回false。 20.3.2 获取麦克风的音频内容 • 要获取麦克风中输入的声音,需要使用 Microphone类的getMicrophone()静态方法,其用 法格式如下所示。 • Micro对象.getMicrophone(index) 访问权限设定 麦克风活动状态 第21章 XML • XML是一种结构化描述信息的标准方法,能够使计算机方便 地使用此种类型的数据信息,并且可以非常方便地编写和 理解这些信息。XML结构简单,应用灵活方便,尤其在数据 交换和移植性上的优点,其迅速成为了行业的应用标准。 • 在ActionScript 3.0中包含一组基于ECMAScript for XML(E4X)规范(ECMA-357第2版)的类。这些类主要用于处 理XML数据,功能强大易用。与以前的编程技术相比,使用 E4X可以更快地用XML数据开发代码。 • 本章主要将简要介绍一下XML语法和结构,然后终点介绍使 用E4X技术创建和使用XML数据,实现数据交换。 21.1 XML文件简介 • XML是eXtensible Markup Language(可扩展标记 语言)的缩写。在www.w3.org/XML/网站上提供了 XML行业标准。http://www.w3china.org 是XML中 文站,上面也有相关的标准信息。 • XML文件提供了简便的标准方法对数据进行分类, 以使其更易于读取、访问以及处理。XML使用类似 于HTML的树结构和标签结构。本节将简要介绍一 下XML的语法和结构。 21.1.1 简单的XML文件示例 • 下面是一个关于XML的文件示例,代码如下所示。 • as3基础教材浪子啸天as3基础教材实例lzxt 21.1.2 XML语法简单介绍 • XML的语法非常简单、直白,是一种自描述的语法。一个 XML文档最基本的组成包括声明、命名、标记、元素和注 释。具体介绍如下: • 1.文档声明 • • 2.命名规则 • 3.元素与标记 • 元素是构成XML文档的主要内容。XML的元素又是通过标记 来定义的,常用的定义方式有两种:非空标记和空标记。 • 4.注释 • 注释是在文档中用于说明相关内容的语句,其在文档中没 有实际的作用。 21.1.3 XML结构 • 每个XML文档都分为两部分:序言和文档元素。其文档结构如图所 示。 • 对于Flash中应用的XML文档来说,主要的组成部分为:序言、元 素和文本,其它的项目使用的并不多。 • 要设计一个优秀的XML文档,需要实现下面的几个特征: • 元素分类要清晰,同类元素的标记要一致,结构相同。 • 父级子级元素逻辑关系清晰。 • 要有长远的考虑,便于扩展。 • 属性和子元素的使用在整个文档中要保持一致。 XML文档结构图 21.2 XML对象 • XML类用于处理XML文件的结构和内容,其中包含 很多属性和方法。本节将利用XML类的属性和方 法,来实现对XML文件的加载、访问和修改。 21.2.1 构造XML对象 • 在ActionScript 3.0中,能够创建XML对象的方法 有以下几种,分别为: • 传递XML格式字符串给XML的构造函数。 • 创建XML对象并直接使用XML进行赋值。 • 创建一个空的XML对象,然后使用E4X填充数据。 • 创建空的对象,从外部读取数据。 • 1.使用构造函数创建XML对象 • 2.直接创建XML对象并赋值 • 3.动态创建XML对象 21.2.2 加载XML文件 • 在ActionScript编程中,所使用的XML文件通常都采用的是外部的XML文 件,这就需要先加载外部的XML文件。加载的过程如下: • (1)使用URLRequest类创建URL链接地址信息。 • (2)使用URLLoader类的方法从指定的URL获取XML格式数据。 • 具体的介绍请参加22.2节。 • 下面的实例实现加载外部的XML文件,首先创建一个XML文件test.xml,内 容如下所示。 • as3基础教材浪子啸天as3基础教材实例lzxt 21.2.3 增加XML元素和属性 • 在ActionScript 3.0中,提供了两个简单的运算符来实现在XML对 象中添加元素和属性,分别为点号“.”,属性标识运算符 “@”。 • XML类是一个动态类,所以在其对象上添加元素和属性,就和向一 个对象(Object)实例添加属性的方法相同。 • 下面的示例实现在XML对象中添加1个元素和2个属性,代码如下所 示。 • //使用XML直接创建XML对象并赋值 • var myxml:XML= • as基础教材450-650; • //输出新的XML对象 • trace(myxml); 21.2.4 删除XML元素和属性 • 要删除XML对象中的一个子元素或者属性,只需使用delete关键字 执行删除指令即可。下面的示例实现删除XML对象中的元素和属 性,代码如下所示。 • //使用XML直接创建XML对象并赋值 • var myxml:XML= • as基础教材450-650 • <新元素/> • • //输出新的XML对象 • trace(myxml); 21.2.5 访问XML元素和属性 • 在ActionScript 3.0中,同样可以使用点运算符和@运算符来访问 XML的元素和属性。下面的示例通过具体的属性名称来实现访问该 属性的值。 • //使用XML直接创建XML对象并赋值 • var myxml:XML= • as基础教材450-650; • //输出book节点下name属性的值 • trace(myxml.book.name);//输出:as基础教材 • //输出book节点下name属性的值 • trace(myxml.book); 第22章 AS3.0与网络通信 • Flash之所以能够有着越来越大的发展空间,其良 好的数据交互功能也起着极为重要的作用。在 ActionScript 3.0中,所有的与外部数据进行交 互的功能都被放在flash.net.*包中,有专门的类 进行管理,而且实现了流程的的标准、统一,使 Flash与外界数据的交互更加的清晰与简单。 • 本章讲着重介绍ActionScript 3.0与外界数据交 互的原理、Flash与外部数据的连接和交互以及 Flash与计算机本地数据的交互操作。 22.1 数据通信基础 • 在创建复杂的ActionScript 3.0应用程序时,通常需要与 服务器端脚本进行通信,或者从外部 XML 文件或文本文件 加载数据。 • 在ActionScript 3.0中,使用URLLoader和URLRequest类来 加载外部文件。加载成功的文件可使用特定类来访问数 据,具体使用何类,取决于加载数据的数据类型。比如如 果加载数据的格式为名称值对类型,则可以使用 URLVariables类来分析服务器结果。如果加载的文件是外 部XML文档,则可以使用XML类的构造函数、XMLDocument类 的构造函数或XMLDocument.parseXML()方法来分析XML文 档。 • 本节讲介绍数据通信的原理、从外部文件或服务器脚本中 加载数据和将数据发送到服务器脚本方法。 22.1.1 构建通信请求过程 • 在ActionScript 3.0中,要实现一个网络通信, 需要三个过程来实现,具体为: • (1)使用URLRequest创建通信请求对象。 • (2)使用通信请求对象,创建URLLoader载入对 象,并发出请求的要求。 • (3)监听URLLoader对象,在响应完成事件后, 返回要处理的数据。 • 下面来逐步介绍通信的过程和方法。 • 1.构建通信请求对象 • 2.发出数据请求 • 3.获取返回数据 22.1.2 加载文本格式数据 • 文本格式数据包括:普通文本、XML、HTML等以 UTF-8字符组成的字符串文本都属于文本格式。 • 下面的示例实现从外部的test.html文件种读取数 据,并把它显示在文本框中,实现读取外部html 网页格式文本的效果。test.html文本内容如图所 示。 test.html文本内容 22.1.3 加载值对格式数据 • 如果要加载的外部文本时值对格式的数据,并且 以URL形式编码,则需要将URLVariables的 dataFormat类型设置为 URLLoaderDataFormat.VARIABLES。一般的值对格 式的数据样式如下所示。 • variable1=value1&variable2=value2。 • 下面的示例实现从外部的test.txt文档中取得值 对格式的数据,并在Flash中使用文本进行显示。 test.txt文档内容如下所示。 • 标题=AS3.0基础教材&作者=浪子啸天&支持网站 =http://www.flasc.cn 22.1.4 加载二进制格式数据 • 二进制文件是指包含在ASCII及扩展ASCII字符中 编写的数据或程序指令的文件。计算机文件基本 上分为二种:二进制文件和ASCII(也称纯文本) 文件,图形文件及文字处理程序等计算机程序都 属于二进制文件。ASCII则是可以用任何文字处理 程序阅读的简单文本文件。 • 在ActionScript 3.0中,二进制文件主要是为了 强调与文本文件的区分,大部分的非文本格式文 件都被归为二进制文件。在ActionScript 3.0 中,所有的图像、SWF文件都可以以二进制格式载 入,以ByteArray字节数组来表示,此数组储存在 URLLoader对象的data属性中。 22.1.5 发送数据 • 如果需要向服务器发送数据,可以有两种方式可供选择: 一是若只是发送不需要返回数据,则可以使用sendToURL() 方法来实现,其用法格式如下: • sendToURL(req:URLRequest) • 二是既需要发送数据,也需要返回数据,则使用Loader对 象的load()方法来实现。通常的数据发送需要执行下面的 两步操作: • (1)将需要提交的数据放入URLRequest对象的data属性 中,然后使用URLLoader对象的load()方法发送数据。 • (2)从URLLoader对象的data属性中获取返回的数据并分 析。 • 下面的示例实现将Flash中的数据发送到后台的asp文件 中,并返回响应的数据信息。 22.1.6 打开外部链接效果 • 在ActionScript 3.0中,要在Flash中打开网址,需要使用 flash.net包中的navigateToURL()函数来实现。其用法格式如下 所示。 • navigateToURL(request:URLRequest, window:String = null) • 说明:此方法实现在包含Flash Player容器的应用程序中,通常 是在一个浏览器中,打开或者替换一个窗口。 • 参数说明如下: • request:URLRequest对象,指定要链接到哪个URL网页地址。 • window:浏览器窗口或HTML帧,其中显示request参数指示的文 档。可以输入某个特定窗口的名称,或者是下面的4个值之一: “_self”指定当前窗口中的当前帧打开网页;“_blank”指定一 个新窗口打开网址;“_parent”指定当前窗口的父级窗口打开网 址;“_top”指定当前窗口中的顶级框架中打开网址。 22.2 与JavaScript通信 • 在Flash应用程序中,常常使用Web浏览器作为宿主程序, 以实现Flash Player播放器与外部数据之间的数据交换。 在ActionScript 3.0中,使用ExternalInterface类实现 Flash和JavaScript脚本进行交互操作。本节将介绍Flash 到JavaScript和JavaScript到Flash的数据交互的实现方 法。 • ExternalInterface类是Flash外部的应用程序的编程接 口,是一个能够在在ActionScript和Flash Player容器 (通常为Web浏览器)之间实现直接通信的应用程序编程接 口。使用此接口,可以实现包含JavaScript的HTML页与 ActionScript之间的通信。 • 在Flash Player中,可以使用HTML页中定义的的 JavaScript来调用ActionScript函数。ActionScript函数 可以返回一个值,JavaScript会立即接收它作为该调用的 返回值。 22.2.1 JavaScript脚本简介 • JavaScript是一种基于对象和事件驱动并具有安 全性能的脚本语言,此语言可以被嵌入到HTML文 件之中。使用JavaScript,可使网页变得生动, 能够重复使用同一段代码,能够使与HTML文断简 化,减少下载时间。 • javaScript语言有很多优点,具体如下: • 1.使用简单 • 2.动态交互 • 3.跨平台操作 • 4.节约页面资源 22.2.2 在网页中加入JavaScript • 有两种方法可以实现在网页中加入JavaScript代 码,分别为:直接加入HTML文档和间接引用js文 件。 • 1.直接加入HTML文档 • 2.间接引用js文档 JavaScript示例代码 HTML中JavaScript输出效果 22.2.3 Flash向JavaScript传递数据 • 要实现Flash向JavaScript传递数据,可以使用 ExternalInterface类的call()方法采用异步调用 的方式调用JavaScript的函数来实现。所谓的异 步调用,指的是无需等待函数的返回值就让操作 继续进行的函数调用方式。 • ExternalInterface类的call()方法,语法格式如 下所示。 • call(functionName:String,...arguments) • 说明:此方法为FlashPlayer容器公开的函数,不 传递参数或传递多个参数。如果该函数不可用, 调用将返回null;否则,它返回由该函数提供的 值。 22.2.4 JavaScript向Flash传递数据 • 要实现JavaScript向Flash传递数据,可以使用 ExternalInterface类的addCallback()方法将ActionScript中的 函数注册为可以从容器中进行调用。成功调用addCallBack()后, 在容器中使用JavaScript或ActiveX代码可以调用在Flash Player 中注册的函数。 • ExternalInterface类的addCallback()方法,语法格式如下所 示。 • addCallback (functionName:String, closure:Function) • functionName:要在容器中调用的函数的函数名称。 • 要调用的closure函数。其可能是一个独立的函数,或者可能是引 用对象实例方法的closure方法。通过传递closure方法,可以将 回调定向到特定对象实例的方法。 • 利用JavaScript向Flash传递数据的过程,可以实现下面的操作: • 调用ActionScript函数。 • 使用标准的函数调用表示法传递参数。 • 将值返回给JavaScript函数。 22.3 So本地数据存储 • Flash影片运行过程中,大多数的数据都存储于影 片本身,一旦影片被关闭,这些数据也就从内存 中被清除掉,下次运行时,数据将从头开始。若 想存储数据或者让客户端的多个影片共享同一组 数据,就要想办法把数据存储在Flash播放器之 外。 • 在ActionScript 3.0中,SharedObject类实现了 在客户端机器中持久性存储数据。有两种类型的 共享对象:本地和远程。本节主要介绍在本地储 存数据。 22.3.1 创建ShareObject对象 • Flash的ShareObject对象一般简称为SO,类似于Web浏览器中的 cookies。它们被一些开发者称为“超级cookies”,因为SO可以 存储大量数据,且存储和读取的都是原生的ActionScript类型数 据。 • ShareObject对象默认的空间大小100KB,用户可以通过 FlashPlayer'sSettingsManager控制的使用空间大小,来严格限 制被使用的空间。存储在本地计算机的SO文件是一种二进制文 件,扩展名为.sol。不同的SWF影片可以通过 flash.net.SharedObject类进行读写.sol文件。 • 创建的.sol文件被放置在Flash播放器对应的应用程序数据目录, 以Windows为例,目录为:C:\Documents and Settings\Administrator\Application Data\Macromedia\Flash Player\#SharedObjects,在此主目录下使用随机字符命名目录, 记录数据。 22.3.2 向SO上写入数据 • 要实现添加数据到SO上,只需给SO对象的data属性添加属 性值。共享对象SO有个内建的属性data,data属性类型为 object,因而可以添加任何信息上去。如下面的示例代码 所示。 • //存储username值给so共享对象 • so.data.username= "浪子啸天"; • 注意:既不能直接向SO共享对象赋值,也不能直接向SO共 享对象的data属性赋值,这样的结果都是错误的。 • 如下面的两行写入数据的方法都是错误的,错误代码如下 所示。 • so.username="浪子啸天"; • so.data="浪子啸天"; 22.3.3 读取SO数据 • 要实现在客户端读取SO数据,原理很简单。因为这些持久性数据 都保存在共享对象的data属性里,只需要访问Data对象的相关属 性就Ok了。 • 下面的示例实现读取SO中储存的数据,代码如下所示。 • var so:SharedObject=SharedObject.getLocal("test") • //将数据写入so • so.data.username="浪子啸天" • so.data.sex="男" • //写入数据 • so.flush() • //读取so中的username • var user=so.data.username • trace(user)//输出:浪子啸天 • trace(so.data.sex)//输出:男 22.3.4 删除保存的SO共享数据 • 要实现删除共享对象中的某个属性值或者删除整个共享对 象,需要使用两种不同的方法:用delete删除共享对象的 data属性中的值;使用clear()方法清除整个共享对象。 • 下面的示例使用delete关键字删除SO共享对象的data对象 中的sex属性,代码如下所示。 • var so:SharedObject=SharedObject.getLocal("test") • //将数据写入so • so.data.username="浪子啸天" • so.data.sex="男" • //写入数据 • so.flush() • //删除so中的sex属性 • delete so.data.sex • trace(so.data.sex)//输出:undefined,说明删除成功 • trace(so.data.username)//输出:浪子啸天 第23章 AS3.0异常处理 • 异常处理是指处理应用程序在编译时或运行时所 发生的错误。如果应用程序能够处理异常错误, 则在遇到错误时,应用程序会执行“一些动作” 作为响应,而不是没有任何响应并且引发该错误 的进程在没有提示的情况下发生失败。正确使用 异常处理有助于防止应用程序和应用程序的使用 者执行其它意外行为。 • 本章重点处理运行时错误的方法、异常的不同类 型以及ActionScript 3.0中新的错误处理系统的 优点。 23.1 异常和错误基础知识 • 异常(Exception)是指在程序运行时发生的错误,并且运行时环境 (即Flash Player)无法自行解决该问题。 • 所谓的运行时错误是指在Adobe Flash Player中运行 ActionScript内容的ActionScript代码中所出现的错误。要确保 平稳地运行ActionScript代码,就必须在应用程序中编写能够处 理该错误的代码,即修正该错误,解决该问题,至少让用户知道 发生了什么错误。此过程称为“错误处理”。 • 所谓的捕获(Catch)异常是指如果发生了异常即运行时错误,并 且代码注意到该异常,则认为该代码“捕获”了异常。捕获异常 后,Flash Player将停止通知其对应的ActionScript代码发生了 异常。 • 运行时错误可以分为以下两类: • 程序错误:指ActionScript代码中的错误,比如为方法参数指定 了错误的数据类型。 • 逻辑错误:指程序的逻辑(数据检查和值处理)错误。 23.2 使用try-catch-finally处理异常 • 在ActionScript 3.0编程过程种,最常见的错误 处理是同步错误处理逻辑,可以通过在处理逻辑 中在适当的位置插入响应的语句,以便在运行时 捕获同步错误。这种错误处理能够使应用程序在 功能失败时注意到发生运行时错误并从错误中恢 复。同步错误捕获逻辑中使用 try..catch..finally语句,这种方式将先尝试 (try)某个操作,然后捕获(catch)来自Flash Player的任何错误响应,最后(finally)执行另 外的操作来处理失败的操作。 23.3 错误(errors)类 • Flash中所包含的错误类是Flash Player应用程序编程接口 (API)的一部分,而不是ActionScript核心语言的一部分。这些 错误类位于flash.error包中,不同的类对应了不同类别的异常错 误处理。 • 在ActionScript 3.0中包含的错误类有7个,如表所示。 类 说明 EOFError 如果尝试读取的内容超出可用数据的末尾,则会引发 EOFError 异常。 IllegalOperationEr ror 当方法未实现或者实现中未涉及当前用法时,将引发 IllegalOperationError 异常。 InvalidSWFErro Flash Player 遇到损坏的 SWF 文件时,将引发此异常。 IOError 某些类型的输入或输出失败时,将引发 IOError 异常。 MemoryError 内存分配请求失败时,将引发 MemoryError 异常。 ScriptTimeoutErro r 达到脚本超时间隔时,将引发 ScriptTimeoutError 异常。 StackOverflowErr or 可用于脚本的堆栈用尽时,ActionScript 将引发 StackOverflowError 异常。 错误类 23.3.1 输入输出异常(IOError)类 • 输入输出异常是指当某些对象的输入或输出操作 失败时,将会引发IOError异常。例如,如果在尚 未连接的或已断开连接的服务程序上尝试读/写操 作,将引发IOError异常。 输入输出异常 23.3.2 读取异常(EOFError)类 • 读取异常是指在读取某些数据时,超出了数据的 范围,从而引发异常。比如在读取数组的时候, 当索引超过数组长度的时候,就会引发异常。 读取异常 23.3.3 堆栈异常(StackOverflowError)类 • 堆栈异常是指当脚本资源被无限损耗时引发的异 常。此异常常出现于无限递归,在此种情况下, 需要将终止case语句添加到该函数中。 堆栈异常 23.3.4 非法操作异常(IllegalOperationError)类 • 非法操作异常是指当方法未实现或者实现中未涉 及当前用法时,将引发此异常。 • 下面的示例尝试使用重载的addChild()方法在舞 台上增加显示对象,造成非法操作异常。使用文 档类:IllegalOperationErrorExample, 非法操作异常 第24章 课件应用实例 • 在当前的教育教学过程中,采用多媒体课件教 学,已经成为一种时尚。在应用比较普遍的多媒 体课件中,flash课件由于其生动活波的效果,较 小的体积,成为课件中的精品。 • 下面就一起来共同学习一下整个教学课件的制作 步骤,希望能够对工作在教学第一线的朋友们有 所帮助。 24.1 课件设计与需求分析 • 课件设计的首要环节,就是要做好课件的设计流 程和设计需求,然后才能够进行完整的课件制 作。本节先简单介绍一下多媒体课件的概念和分 类,然后对本课件的设计需求进行分析,构建好 本课件的设计过程。 24.1.1 课件介绍 • Flash课件根据教学的内容和需求,一般可以分为以下几种类型: • 模拟实验类:此类课件应用在理科如物理、化学、生物等学科 中,主要目的是模拟那些不容易演示或者不太容易观察的实验。 • 动态演示类:此类课件主要用于理科的数学、文科的语文等学科 中,主要目的是把原来静态的内容动态化,或者把僵硬的内容形 象化,提高学生的学习兴趣。 • 教学游戏类:此类课件主要用在低年级的教学中,其目的主要是 增强教学内容的趣味性,使学生能够在娱乐中获取知识。 • 反馈交互类:此类课件在各个科目的课件中都会用到,主要目的 是练习教学内容,反馈教学得失。 • 培训课程类:此类课件主要用于企业和政府的培训课程中,目的 是增强学习的趣味性,提高学习的有效性,并能够通过系统进行 及时的反馈,实现良好的效果。 24.1.2 课件设计需求分析 • 本章将以Adobe Flash CS3为工具,利用ActionScript 3.0 为编程语言,制作一个高中物理教学课件。本例选择版本 为人民教育出版社出版全日制普通高级中学课本(必修) 中第一册第五章第三节的内容《平抛物体的运动》。本节 课由本人设计、讲授,对教学内容有比较深刻的认识和理 解。课件的设计和制作,主要针对教学的实际需要,做到 简繁适当,内容清晰直观。当然,针对地区的不同、教材 的不同、学生实际情况的不同,课件也会相应的修改和变 动。为了适应教学的需求,本课件主要针对知识进行探 究,利用动画效果来模拟显示平抛运动的规律。由于篇幅 有限,模拟动画对应的文字描述,在本例中不再添加,具 体请查看源文件。 24.2 课件设计过程 • 本节将利用ActionScript 3.0编程原理,实现在 Adobe flash CS3中进行动画编程,实现一个完整 课件的制作过程。 24.2.1 设计准备与素材准备 • 在课件设计的过程中,有大量的文件和素材需要 准备,本节将着重介绍本课件制作过程中所需要 创建的基本文件和元件,方便后面的编程和使 用。 • 1.创建文档 • 2.创建素材“小球” • 3.创建素材按钮 • 4.多选框(CheckBox)组件介绍 • 5.场景复制和重命名 24.2.2 Loading制作 • 在Adobe Flash CS3文档中创建自身的Loading,所加 ActionScript 3.0的代码帧上最好不要放其他元件,或单独用一 个场景,否则将看不到Loading的效果。所以在这里单独使用一个 空白场景作为Loading场景。把当前场景的名称修改为 “loading”。 • 要实现Loading,需要完成下面的几项任务: • (1)创建一个文本框,用于显示进度的值。 • (2)创建两个矩形,通过缩放其中的一个,表示加载进度与总进 度的关系。 • (3)创建加载过程的事件处理函数,用于监听加载进度并控制文 本框内容和矩形的缩放。 • (4)创建加载完成的事件处理函数,用于在加载完成时删除创建 的显示对象,并播放进入下一场景。 • (5)在当前根路径注册控制加载的两个事件处理函数。 24.2.3 封面设计和变量初始化 • 课件的封面是第一时间呈现在学生面前的,一个优秀的界面设计可以吸引学生的注意 力,将学生的思想带入一个假象的科学范畴之内。 • 封面设计作为一个单独的场景存在,单击【窗口】|【其它面板】|【场景】,打开场 景面板,单击添加场景按钮,添加一个新场景,并修改场景名称为“首页”。在本场 景创建封面内容。本例采用蓝色为基调,使用渐变颜色和颜色反差来衬托动画。具体 的设计过程在此不在细述,效果如图所示。 封面效果图 24.2.4 平抛运动演示 • 在场景面板中,选中并复制场景“首页”,创建 一个新的场景并命名为“演示”。然后对场景进 行一下处理,仅保留背景内容。 • 在此场景中,将实现平抛运动的模拟演示。具体 需要实现的功能如下: • 创建一个坐标,用于对照小球的运动位置。 • 加载三个不同颜色的小球,分别做水平向右直线 运动,竖直向下直线运动和平抛物体运动。 • 利用Timer类控制小球的播放、停止和重置。 • 使用复选框控制是否“记录位置”和是否“绘制 轨迹”。 24.2.5 平抛运动分运动规律 • 在场景面板中,选中并复制场景“演示”,创建一个新的 场景并命名为“分运动规律”。其它保持不变。 • 在此场景中,将实现对平抛运动的分运动规律的探究。具 体需要实现的功能如下: • 在坐标原点加载三个不同颜色的小球,分别做水平向右直 线运动,竖直向下直线运动和平抛物体运动。 • 利用Timer类控制小球的播放、停止和重置。 • 使用复选框控制是否“显水平线”和是否“显竖直线”。 此处是本场景演示的重点,利用绘制出的线条的关系,来 确定平抛运动在水平和竖直方向各自做什么运动。 24.2.6 平抛运动速度规律 • 在场景面板中,选中并复制场景“分运动规律”,创建一 个新的场景并命名为“速度变化规律”。其它保持不变。 • 在此场景中,将实现对平抛运动的速度规律的探究。具体 需要实现的功能如下: • 在坐标原点红色小球,控制其平抛物体运动。 • 创建一个输入文本和两个动态文本,用来输入“水平速 度”和显示“竖直速度”和“合速度”。 • 利用Timer类控制小球的播放、停止和重置。 • 使用复选框控制是否“绘制轨迹”。 • 使用向量绘制方法,绘制箭头线来表示速度的大小和方 向,并进行平行四边形合成。 24.2.7 平抛运动位移规律 • 在场景面板中,选中并复制场景“速度变化规律”,创建一个新的场景并 命名为“位移变化规律”。其它保持不变。 • 在此场景中,将实现对平抛运动的位移规律的探究。具体需要实现的功能 如下: • 在坐标原点红色小球,控制其平抛物体运动。 • 创建一个输入文本和三个动态文本,用来输入“水平速度”和显示“竖直 位移”“水平位移”和“合位移”。 • 利用Timer类控制小球的播放、停止和重置。 • 使用复选框控制是否“绘制轨迹”。 • 使用向量绘制方法,绘制箭头线来表示位移的大小和方向,并进行平行四 边形合成。 位移变化规律效果图 24.2.8 反馈练习 • 在场景面板中,选中并复制场景“位移变化规律”,创建一个新的场景并 命名为“反馈练习”。把其中的坐标系,文本内容以及复选框全部删除, 只保留3个功能按钮即可。 • 在此场景中,将实现对平抛运动的分运动规律的探究。具体需要实现的功 能如下: • 在坐标原点红色小球,控制其平抛物体运动。 • 创建一个输入文本和三个动态文本,用来输入“水平速度”和显示“竖直 位移”“水平位移”和“合位移”。 • 利用Timer类控制小球的播放、停止和重置。 • 使用复选框控制是否“绘制轨迹”。 • 使用向量绘制方法,绘制箭头线来表示位移的大小和方向,并进行平行四 边形合成。 飞机投弹效果图 24.2.9 跳转及功能按钮实现 • 跳转按钮是指在不同场景之间进行转换时所使用 的按钮,功能按钮主要是指文档的关闭和最大 化、最小化按钮。 • 1.跳转按钮 • 2.功能按钮 课x件实例最终效果图 第25章 游戏应用实例 • 网络游戏的flasher,总是渴望使用Flash制作一 款功能强大,交互性强,便于操作,易于传播的 网络游戏。越来越多的Flash爱好者已经不再满足 仅仅去欣赏别人制作的Flash,或者玩别人制作的 Flash游戏,而是希望自己也能投入到Flash游戏 制作者的行列,成为一个Flash游戏高手。 • 本章,将创建一个博彩类的竞猜游戏“数字猜猜 猜“。利用该游戏实例让广大的游戏爱好者了解 一下Flash在制作游戏时的基本思路和方法。 25.1 Flash游戏介绍及原理和流程 • 本节将对Flash游戏进行简单的介绍,并按照当前 Flash游戏的状况,对其进行分类。然后着重介绍 本实例游戏的实现原理和实现流程。 25.1.1 Flash游戏介绍 • Flash游戏是以Flash为创作工具,并以Flash Player播放器为主要显示平 台的一种新兴的游戏形式。Flash游戏的特点是比较简单,操作方便,绿 色且无需安装,文件体积小。正因为有这样显著的特点和有点,现在已经 深受广大网友的喜爱。Flash游戏的兴起并迅速成为热门游戏类型,使得 现在的Flash小游戏开发速度变得更快,几乎每一天都有新的flash小游戏 出现,并且种类繁多,花样百变,层出不穷。比如在网络上风靡一时的连 连看游戏,密室逃脱类游戏,美少女彩衣彩妆游戏等等,都受到游戏玩家 的欢迎和好评。 • Flash游戏,根据游戏制作的目的以及玩游戏的方式,一般分为以下几 种: • 动作类,主要是搏击、战斗为主。 • 趣味类,主要以趣味游戏,引人发笑为主。 • 博彩类,主要竞猜为主。 • 赛车类,主要以速度为主。 • 射击类,主要以点击发射为主。 • 棋牌类,以棋牌类游戏为主。 25.1.2 数字猜猜猜游戏原理及实现流程 • 数字猜猜猜游戏是一个经典的小游戏,各种编程 语言都能编写出该游戏。本节将介绍其实现原理 和实现流程。 • 1.数字猜猜猜游戏原理 • 数字猜猜猜是一款经典的益智类游戏,此游戏主 要侧重于培养玩家在数字方面的智力和反应能 力。 • 2.数字猜猜猜游戏实现流程 • 数字猜猜猜游戏的是实现流程比较简单,具体流 程如下:出题→用户输入→确认输入→输入数据 分析→判断结果→游戏反馈,给出提示。 25.2 游戏准备 • 本节将主要针对两个核心环节进行分析研究,并 给出处理方法,这两个环节为:出题环节中随机 数字的产生和数据分析环节中的数据校验的方 法。 25.2.1 随机数字产生方法 • 游戏开始之后,出题阶段的核心任务就是产生所需要的一组随机 数字。 • 按照本例的设计要求,产生的一个指定个数的由0-9数字组成的不 重复的数组。该数组的产生方法分为三步来完成:产生一个随机 数字;产生一个指定范围的随机数字;产生由不重复的数字组成 的数组。这三步的核心是产生数组的环节。 • 产生不重复数字的流程将使用下面的过程来实现:先创建一个指 定范围的随机数,然后和数组进行比照,若该数字在数组中不存 在,写入数组;若数组中已经存在,不写入数组,最后返回,重 新循环,直到完成所需的数字个数。具体的产生流程如图所示: 随机数字产生流程图 25.2.2 输入数据分析 • 对用户输入的数据进行分析判断是游戏处理的关键。数据的判断分为两个 部分,分别为:数据有效性确认:包括数据长度是否足够指定位数;输入 的是否全部为数字;输入的是否有重复的数字。 • 数据校验:包括检验输入的数字是否和谜底数组中的数字是否完全相同; 若不相同,需要检验位置、数字都相同的数字有几个,数字正确但位置不 正确的数字有几个。 • 这些输入数据分析的部分要求通过CheckInt类来来实现,此类中包含了5 个方法,分别为: • checkLength(_len:int):检查输入文本数组长度是否和指定长度_len相 同,若相同,返回true,否则返回false。 • checkChar():检查输入文本数组中是否含有非数字字符,若存在,返回 false,否则返回true。 • checkRepeat():检查输入文本数组中的数字是否有重复数字。若有,返 回false,否则返回true。 • checkTRight():将输入文本数组中的数字与谜底数组中的数组进行对 照,返回数字和位置都正确的数字的个数。 • checkRight():将输入文本数组中的数字与谜底数组中的数组进行对照, 返回数字正确,但位置不正确的数字的个数。 25.3 游戏设计实施 • 本节将详细介绍整个游戏设计的流程和实施的具 体方法,通过本节内容,能够使读者很好的掌握 游戏设计的流程。 25.3.1 游戏初始化 • 本游戏的主场景的内容主要分为三部分,分别 为: • 静态部分:包括静态的文字内容,动态文本框。 • 输入部分:主要是指用于输入的文本框。 • 控制按钮:主要是用于实现数据交互的按钮和其 它控制按钮。 • 此外,初始化操作,还需要初始化变量,获取谜 底数组。 25.3.2 创建静态场景部分 • 静态场景部分主要包括两段文本内容和一个大的 动态文本框。文本框的需要使用多行文本,设置 背景演示,便于区分。这些内容均使用TextFiled 类来实现。静态场景使用initscene()方法来实 现,在GuessInt类中加入此方法, 静态场景部分图 25.3.3 创建输入文本并获取输入内容 • 输入文本框在本例中需要四个,不过为了后续扩 展的需要,本例将先构造一个创建输入文本框的 方法,创建一个文本框并返回,然后使用循环进 行创建符合要求的文本框。创建文本框的方法为 initinput(),将其加入GuessInput文档类, 输入文本效果图 25.3.4 创建控制按钮 • 在本游戏中,需要使用的控制按钮有三个,其名称及功能分别如下: • 猜一猜按钮:此按钮执行数字猜测任务,单击此按钮,开始分析输入数据 并返回分析结果。 • 清空按钮:在检测之后发现猜测不正确,利用清空按钮清空输入框,可以 继续再一次进行猜测。 • 再来一次按钮:此按钮在10次猜测不正确或者想重新产生一组数据进行猜 测时使用。 按钮效果图 25.3.5 数据判断分析 • 数据判断分析的过程是该游戏的核心。整个判断 过程需要判断数据的有效性,并反馈数据校验的 结果。判断的流程如图所示: 数据判断流程图 第26章 Flash留言本实例 • 通常在个人站点的设计过程中,留言本是一个不 可缺少的部分。通过留言本,可以获取访问者对 网站的反馈信息,进而实现网站的交换性。本章 将Flash与asp后台相结合,实现一个简单的RIA (Rich Interface Applications)网络应用范 例。 26.1 前期准备 • 本节主要进行前期准备工作,首先对要实现的留 言本的功能及实现流程加以分析;然后讲解IIS服 务器的架设和环境测试;最后讲解Access数据库 的安装和创建。 26.1.1 留言本功能和流程分析 • Flash留言本是网络中常用的,功能比较齐备、交互比较方便的留言系 统,在本节主要介绍其实现的流程和想对应板块的功能分析。 • 1.主要功能 • 留言本的功能主要有两个,分别为: • 发表留言功能:访问者需要输入昵称、QQ、Email等基本信息和留言标题 和留言内容。然后选择提交留言进行发表。 • 浏览功能:用户进入留言本后即可访问所有的留言,此外还需要支持分页 显示和翻页浏览功能。 • 2.实现流程 流程图 26.1.2 Windows XP下IIS服务器的架设 • IIS,指Internet Information Server,即互联网信息服务,是 一种Web(网页)服务组件。在IIS中包括Web服务器、FTP服务 器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、 新闻服务和邮件发送等方面,使用它能够实现在网络(包括互联 网和局域网)上很容易的发布信息。本节将介绍在Windows XP环 境中架设自带的IIS 5.1服务器,并进行配置和管理。 添加或删除程序窗口 26.1.3 asp简介与环境测试 • ASP是Active Server Page的缩写,意思是“活动服务器网页”。ASP是微 软公司开发的作为代替CGI脚本程序的一种服务器脚本技术,其可以实现 与数据库和其它程序进行交互,是一种简单、方便的编程工具。ASP的网 页文件的格式是.asp,现在常用于各种动态网站中。 • 作为微软公司开发的一种捆绑在操作系统中的IIS服务器,它所支持的asp 脚本语言相对于HTML超文本标记语言,具有很好有点,主要包括以下几 点: • ASP实现了动态网页技术,突破了静态网页的一些功能限制。 • Asp代码可以包含在HTML代码组成的文件当中,便于修改和测试。 • 服务器端解释asp文件后的结果以HTML格式传送到客户端浏览器上,各种 不同浏览器都可以正常浏览ASP所产生的网页,实现了浏览器的兼容。 • ASP提供了一些内置对象,使用这些对象可以使服务器端脚本功能更强。 • 服务器端解释asp文件后的结果以HTML格式传回客户端浏览器,客户端看 不到ASP所编写的原始程序代码,可防止ASP程序代码被窃取。 • Asp技术通常使用VbScript、JavaScript等简单易懂的脚本语言,学习和 使用都比较方便。本文使用Vbscript作为编写asp代码的语言。 26.1.4 安装Access数据库 • Access数据库属于微软公司的Microsoft Office 软件的一部分,在安装Microsoft Office可以选 择是否安装。在此选择安装Access数据库,本书 以Microsoft Office 2003为例,下图显示在安装 过程中选择组件的情况,如图所示。 安装Access数据库 Microsoft Access 2003图标 26.1.5 创建Access数据库 • 本节将利用Aceess程序建立数据库。具体操作步 骤如下所示。 新建数据库 保存数据库 26.2 Flash前台制作 • Flash前台部分,主要执行留言内容的显示和浏 览,执行签写留言操作。具体分为这样及部分来 完成: • 创建基本元件,包括静态、动态和输入文本元 件,文档背景元件和按钮元件。此部分使用Creat 类来实现。 • 创建详细场景和面板。此部分使用Csence类来实 现。 • 显示和浏览留言部分,在Main文档类中实现。 • 发表留言部分,在Main文档类中实现。 26.2.1 创建基本元件 • 创建基本元件的方法,位于Creat类中。此类提供 的方法包括: • creatTitle():创建一个场景显示标题,此标题 被加上了滤镜效果。 • creatStaticText():创建静态文本的方法。 • creatDyText():创建多行动态文本的方法。 • creatInputText():创建单行输入文本的方法。 • creatMInputText():创建多行输入文本的方法。 • creatButton():创建按钮的方法。 • creatbg():创建显示留言的背景。 • creatAlertbg():创建提示面板的背景。 26.2.2 创建场景内容和面板 • 创建创建内容和面板的方法在CSence类中,其中包含了以下几种方法: • creatAddsc():创建发表留言场景的方法。 • CreatListSc():创建显示留言场景的方法。 • ShowBook():显示留言内容的方法。 • alert():创建提示面板的方法。 • 具体的实现方法位于CSence类中,代码如下所示。 • package com.lzxt{ •//导入包 • import flash.display.Sprite; • import com.lzxt.Creat; • import flash.text.TextField; •//创建类 • public class CScene extends Sprite { •//构造函数 • public function CScene() { •} 26.2.3 显示和浏览留言 • 显示和浏览留言的流程为:从数据库获取留言信 息→分析留言数据信息→加载显示面板→显示留 言→翻页按钮,进行浏览。 • 具体的程序代码,使用文档类:Main。代码如下 所示。 显示和浏览留言效果图 26.2.4 发表留言 • 发表留言的实现流程为:单击显示场景的【签写 留言】按钮→初始化签写留言场景→填写留言内 容→单击【发表留言】按钮,发表留言或者单击 【返回首页】按钮,取消发表留言,返回。→若 发表留言,则执行后台程序,写入数据库。 签写留言效果图 26.3 后台支撑部分 • 后台支撑部分由三个asp文件组成,分别为: conn.asp、getly.asp和fbly.asp。分别用来执行 连接数据库,获取留言和发表留言三个环节。 • (详细内容请参照本书) • 说明:发表留言环节,主要是将获取的数据写入 数据库,实现数据的出错。 • 至此,本例后台部分全部完成。 26.3.1 连接数据库 • asp中也可以将连接数据库的方法定义为一个函 数,在需要使用的页面中包入定义函数的页面, 就能够使用了。本节将定义连接和关闭数据库的 函数,代码如下所示。 26.3.2 获取留言 • 获取留言的流程如下:获取需要打开的页码→打 开数据库→建立数据集→获取符合条件的数据→ 对数据进行组合→输出数据。实现的代码如下所 示。 26.3.3 发表留言 • 发表留言的流程为:获取flash发送过来的数据→ 打开数据库→建立数据集→追加数据,写入数据 库→关闭数据库,完成操作。具体的实现代码如 下所示。
还剩497页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

colvin1984

贡献于2013-07-05

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf