• 1. 第1章 AcionScript 3.0概述ActionScript 3.0是针对Flash Player运行时环境的编程语言,它用于处理各种人机交互、数据交互等功能。本章将粗略的介绍ActionScript语言的发展历史、新增特色、编程环境等内容,以及第一个ActionScript3.0程序。
  • 2. 1.1 关于ActionScript 3.0ActionScript3.0是随着Adobe Flash CS3和Flex 2.0的推出而同步推出的脚本编程语言。本节将对ActionScript3.0进行简要的介绍,并通过一些具体的实例图片,展示了常见的ActionScript的应用领域。
  • 3. 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带来性能突破。
  • 4. 1.1.2 ActionScript 3.0能做什么最初在Flash中引入ActionScript,目的是为了实现对Flash影片的播放控制。而ActionScript发展到今天,其已经广泛的应用到了多个领域,能够实现丰富的应用功能。 ActionScript 3.0最基本的应用与创作工具Adobe Flash CS3结合,创建各种不同的应用特效,实现丰富多彩的动画效果,使Flash创建的动画更加人性话,更具有弹性效果。这些基础应用当中,应用最为广泛的就是使用ActionScript脚本控制的弹性菜单。下面是一个弹性的效果,
  • 5. 1.2 ActionScript 3.0的新特色ActionScript 3.0包括二部分:核心语言和Flash Player API。核心语言用于定义编程语言的基本结构, 比如声明变量,创建表达式控制程序结构和数据类型等。Flash Player API是由一系列用于实现特定功能的flash player类组成。
  • 6. 1.2.1 核心语言的新特色ActionScript3.0核心语言与ECMAScript标准兼容,并和新改进的一些功能区域进行结合。下面是对一些其开发者方便的地方和用法总结的一些新特点: 1.运行时的异常处理机制 2.运行时类型 3.密封类 4.闭包方法 5.E4X 6.正则表达式 7.命名空间 8.新基元类型
  • 7. 1.2.1 Flash Player API 新功能Flash Player API为增强Flash Player容纳ActionScript语言的能力而引入的一组类和功能。这种功能把ActionScript核心语言和Flash平台之间建立了一座桥梁,大大提高了Flash应用程序的能力,并对核心语言起到了重要的补充作用。下面列出一些Flash Player API功能的新特点: 1.DOM3事件模型 2.显示列表API
  • 8. 1.3 Flash CS3的动作面板介绍Flash CS3中可以使用动作面板、“脚本窗口”或者外部编辑器的创作环境中田间ActionScript代码。本节就来介绍一下Flash CS3的动作面板窗口和Flash CS自带的编辑器窗口,并将详细的介绍功能按钮的作用。
  • 9. 1.3.1 动作面板概述如果要在Flash CS3中加入ActionScript代码,可以直接使用动作面板来输入。 要打开动作面板,请执行下面的操作:单击【窗口|【动作】,或者按【F9】。 打开后的动作面板如图所示。 下面对图中各部分的名称及作用加以说明。 A:脚本窗格,用于输入代码的地方。 B:面板菜单,单击后可显示动作面板功能菜单 C:动作工具箱,可以通过双击或者拖动的方式将其中的ActionScript元素添加到脚本窗格中。 D:脚本导航器,其有两个功能,一是通过单击其中的项目,可以将与该项目相关的代码显示在脚本窗口中,二是通过双击其中的项目,对该项目的代码进行固定操作。
  • 10. 1.3.2 脚本窗口概述Action Script 3.0是很好的面向对象编程语言,同样Flash CS3也提供了一个很不错的脚本编辑器,这就是Flash的脚本窗口。使用脚本窗口可以创建或者导入外部的脚本文件,这些文件可以是ActionScript、Flash Communication或Flash JavaScript文件。
  • 11. 1.3.3 动作面板和脚本窗口的工具介绍在动作面板和脚本窗口的上侧都有一排功能按钮,利用这些功能按钮可以很方面的进行ActionScript代码的输入和编写,下面对这些按钮进行具体的说明。 :将新项目添加到脚本中按钮,该按钮主要用于显示语言元素,这些元素同时也会显示在“动作”工具箱中。可以利用它来选择要添加到脚本中的项目或者元素名称。 :查找按钮,主要用于查找并替换脚本中的文本。 :插入目标路径按钮(仅限动作面板),可以帮助为脚本中的某个动作设置绝对或相对目标路径。 :语法检查按钮,用于检查当前脚本中的语法错误。 :自动套用格式按钮,用来调整脚本的格式以实现正确的编码语法和更好的可读性。 :显示代码提示按钮:用于在关闭了自动代码提示时,可使用此按钮来显示正在吃力的代码行的代码提示。 :调试选项按钮(仅限动作面板),用于设置和删除断点,以便在调试时可以逐行执行脚本中的每一行。
  • 12. 1.3.3 动作面板和脚本窗口的工具介绍:折叠成对大括号按钮,用于对出现在当前包含插入点的成对大括号或小括号间的代码进行折叠。 :折叠所选按钮:用于折叠当前所选的代码块。 :展开全部按钮:用于展开当前脚本中所有折叠的代码。 :应用块注释按钮,用于将注释标记添加到所选代码块的开头和结尾。 :应用行注释按钮,用于在插入点处或所选多行代码中每一行的开头处添加单行注释标记。 :删除注释按钮,用于从当前行或当前选择内容的所有行中删除注释标记。 :显示/隐藏工具箱按钮,用于显示或隐藏“动作”工具箱。 :脚本助手按钮(仅限动作面板),其用于打开和关闭“脚本助手”模式。 :帮助按钮,用于显示“脚本”窗格中所选 ActionScript 元素的参考信息。 :面板菜单 (仅限动作面板),包含适用于动作面板的命令和首选参数。
  • 13. 1.4 ActionScript 3.0的首选参数设置无论是在动作面板还是脚本窗口中编辑ActionScript代码,都可以通过设置首先参数来配置输入的ActionScript代码的格式。 要设置ActionScript 3.0的首选参数,需要先打开首选参数窗口。请执行下面的操作:选择【编辑】|【首选参数】,打开首选参数对话框, 1. 工具提示样式的代码提示 2.使用菜单样式的代码提示
  • 14. 1.5 面向对象编程概述ActionScript 3.0是为面向对象编程而准备的一种脚本语言。本节将简单介绍一下面向对象编程的基本概念。 面向对象编程,英文为:Object Oriented Programming,简写为OOP,意思为面向对象程序设计,它是一种计算机编程架构。 程序(program)是为实现特定目标或者解决特定问题而用计算机语言编写的命令序列的集合。它可以是一些高级程序语言开发出来的可以运行的可执行文件,也可以是一些应用软件制作出的可执行文件,比如Flash编译之后的SWF文件。 编程是指为了实现某种目的或需求,使用各种不同的程序语言进行设计,编写能够实现这些需求的可执行文件。
  • 15. 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”程序
  • 16. 第2章 AS3.0编程语言基础语法、数据、变量、运算符和语句构成了编程语言的基础。本章将通过大量的测试代码。详细的介绍ActionScript 3.0中的语法、数据类型,变量以及运算符。通过本章的学习,为以后的面向对象编程将打下一个坚实的基础。
  • 17. 2.1 AS3.0语法任何一门编程语言在编写代码时都必须遵循一定的规则,这个规则就是语法。本节将着重介绍从ActionScript 2.0开始使用的点语法和区分大小写,了解编程常用的标点符号的使用,以及程序注释的使用方法。
  • 18. 2.1.1 点语法Flash中使用点(.)运算符来访问对象的属性和方法,点运算符主要用于下面的几个方面。 1.可以采用对象后面跟点运算符的属性名称(方法)名称来引用对象的属性(方法)。 2.可以采用点运算符表示包路径。 3.可以使用点运算符描述显示对象的路径。
  • 19. 2.1.2 标点符号使用在Flash中有多种标点符号都很常用,分别为:分号(;)、逗号(,)、冒号(:)、小括号(())、中括号([])和大括号({})。这些标点符号在Flash中都有各自不同的作用,可以帮助定义数据类型,终止语句或者构建ActionScript代码块。 1.分号(;):ActionScript语句用分号(;)字符表示语句结束。 2.逗号(,):逗号的作用主要用于分割参数,比如函数的参数,方法的参数等等。 3.冒号(:):冒号的作用主要用于为变量指定数据类型。要为一个变量指明数据类型,需要使用var关键字和后冒号法为其指定。 4.小括号(()):小括号在ActionScript3.0中有三种用途。 首先,在数学运算方面,可以用来改变表达式的运算顺序。小括号内的数学表达式优先运算。 其次,在表达式运算方面,可以结合使用小括号和逗号运算符,来优先计算一系列表达式的结果并返回最后一个表达式的结果。 5.中括号([]):中括号主要用于数组的定义和访问, 6.大括号({}):大括号主要用于编程语言程序控制,函数和类中。 在构成控制结构的每个语句前后添加大括号(例如if..else 或for),即使该控制结构只包含一个语句。
  • 20. 2.1.3 注释注释是使用一些简单易懂的语言对代码进行简单的解释的方法。注释语句在编译过程中并不会进行求值运算。可以用注释来描述代码的作用,或者返回到文档中的数据。注释也可以帮助记忆编程的原理,并有助于其他人的阅读。若代码中有些内容阅读起来含义大不明显,应该对其添加注释。 ActionScript3.0中的注释语句有两种:单行注释和多行注释。 单行注释以两个单斜杠(//)开始,之后的该行内容均为注释。比如下面的代码: trace("1234")//输出:1234
  • 21. 2.1.4 关键字和保留字保留字,从字面上就很容易知道这是保留给ActionScript 3.0语言使用的英文单词。因而不能使用这些单词作为变量、实例、类名称等。如果在代码中使用了这些单词,编译器会报错。 ActionScript3.0中的保留字分为3类:词汇关键字、语法关键字和供将来使用的保留字。 1.词汇关键字 2.句法关键字 3.供将来使用的保留字。
  • 22. 2.2 变量和常量变量和常量,都是为了储存数据而创建的。变量和常量就像是一个容器,用于容纳各种不同类型的数据。当然对变量进行操作,变量的数据就会发生改变,而常量则不会。 变量必须要先声明后使用,否则编译器就会报错。道理很简单,比如现在要去喝水,那么你首先要有一个杯子,否则怎么样去装水呢?要声明变量的原因与此相同。
  • 23. 2.2.1 声明变量的语法在ActionScript 3.0中,使用var关键字来声明变量。格式如下所示。 var 变量名:数据类型; var 变量名:数据类型=值; 变量名加冒号加数据类型就是声明的变量的基本格式。要声明一个初始值,需要加上一个等号并在其后输入响应的值。但值的类型必须要和前面的数据类型一致。
  • 24. 2.2.2 变量的命名规则变量的命名既是任意的,又是有规则,有目的的。随手牵来、杂乱无章的命名在Flash里面容易引起代码的混乱,也不容易进行维护操作。 变量的命名首先要遵循下面的几条原则: 它必须是一个标识符。它的第一个字符必须是字母、下划线(_)或美元记号($)。其后的字符必须是字母、数字、下划线或美元记号。注意:不能使用数字作为变量名称的第一个字母。 它不能是关键字或动作脚本文本,例如true、false、null或undefined。特别不能使用ActionScript的保留字,否则编译器会报错。 它在其范围内必须是惟一的,不能重复定义变量。
  • 25. 2.2.3 变量的作用域变量的作用域指可以使用或者引用该变量的范围,通常变量按照其作用域的不同可以分为全局变量和局部变量。全局变量指在函数或者类之外定义的变量,而在类或者函数之内定义的变量为局部变量。 全局变量在代码的任何地方都可以访问,所以在函数之外声明的变量同样可以访问,如下面的代码,函数Test()外声明的变量i在函数体内同样可以访问。 var i:int=1; //定义Test函数 function Test() { trace(i); } Test()//输出:1
  • 26. 2.2.4 变量的默认值变量的默认值是指变量在没有赋值之前的值。对于ActionScript3.0的数据类型来说,都有各自的默认值,下面使用代码来测试一下: 通过上面的代码输出,已经可以得到这些数据类型变量的默认值,分别为: Boolean型变量的默认值是:false。 int型变量的默认值是:0。 Number型变量的默认值是:NaN。 Object型变量的默认值是:null。 String型变量的默认值是:null。 uint型变量的默认值是:0。 *型变量的默认值是:undefined。
  • 27. 2.2.5 使用const声明常量Action Script 3.0中增加了一个const关键字,用于声明常量。常量是指具有无法改变的固定值的属性。比如Math.PI就是一个常量。常量可以看做一种特殊的变量,不过这种变量不能赋值,不能更改而已。 使用用const声明常量的语法格式和var声明的变量的格式一样: const 常量名:数据类型; const 常量名:数据类型=值; 下面声明常量的代码: const g:Number=9.8;
  • 28. 2.3 基础数据类型和其它的面向对象的编程的数据类型一样,ActionScript3.0的数据类型同样分为两种,具体划分方式如下所示。 基元型数据类型:Boolean、int、Number、String和uint。 复杂型数据类型:Array、Date、Error、Function、RegExp、XML和XMLList。 一般来说,基元值的处理速度通常比复杂值的处理速度要快。 基元型数据和复杂型数据类型的最大的区别是:基元型是值对类型数据,而复杂型是引用类型数据。值对类型直接储存数据,使用它为另一个的变量赋值之后,若另一个变量改变,并不影响原变量的值。引用类型指向要操作的对象,另一个变量引用这个变量之后,若另一变量发生改变,原有的变量跟着也要发生改变。 基元型数据类型都是值对类型数据,复杂型数据都是引用类型数据。 另外,最明显的一个区别是,如果数据类型能够使用new关键字创建,那么它一定是引用型数据变量。
  • 29. 2.3.1 基础数据类型说明本节通过大量的测试代码,来说明各种不同的数据类型的用法和使用中的注意事项。 1.Boolean 数据类型 2.数字:int、uint和Number 3.String 数据类型 4.Array数组类型 5.Object数据类型 6.Object数据类型
  • 30. 2.3.2 数据类型检查任何编程代码在执行前或者执行时都要执行数据类型的检查,以避免出现数据错误。ActionScript 3.0是动态类型的语言,它默认的是执行时进行数据类型检查。同时它也在适合使用“严格模式”的编译器在编译时执行数据类型检查。在使用严格模式的编译器中,数据类型检查既可以在执行前执行编译器检查,也可以在运行时执行运行时检查。在标准模式下,只支持默认的执行时数据类型检查。 比如说在程序编写过程中,要明确传递变量值的类型和接受参数类型相同。比如下面的代码: function func(mystr:String) { trace(mystr); } var str:String="welcome you"; func(str);
  • 31. 2.3.3 隐式数据类型转换数据类型转换是指把某个值转换为其它类型的数据。类型的转换有两种方式:隐式转换和显式转换。隐式转换又称为强制转换,由Flash Player在运行时执行。比如将2赋值给Boolean数据类型的变量,则Flash Player会先将2转换为布尔值true,然后再将其赋值给该变量。 隐式转换可以称为自动转换,是在程序编译的过程中由程序本身来进行数据类型的转换。它主要发生在许多上下文中。主要分为以下几种情况: 在赋值语句中。 在将值作为函数的参数传递时。 在从函数中返回值时。 在使用某些运算符(如加法运算符(+))的表达式中。
  • 32. 2.3.4 显式数据类型转换显式转换是指代码若指示编译器将一个数据类型的变量视为属于另一个类型的变量时执行该转换。该转换主要利用数据类型的对象名称来转换。常用的数据转换均为此方式。 显示转换是利用数据类型的对象名称来转换,常见的主要有下面的几种。 1.转换为 int、uint 和 Number 2.转换为Boolean 3.转换为 String
  • 33. 2.3.5 无类型说明符ActionScript 3.0引入了三种特殊类型的无类型说明符:*,void和null。 使用*类型用于指定属性是无类型的。使用*作为类型注释与不使用类型注释等效。从无类型属性中读取的表达式可视为无类型表达式。该说明符主要用于两个方面:将数据类型检查延缓到运行时和将undefined存储在属性中。 void用于说明定函数无法返回任何值。void类型只有一个值:undefined。该说明符仅用于声明函数的返回类型。 null是一个没有值的特殊数据类型。Null数据类型只有一个值:null。Null数据类型的不与任何类相关联。不可将Null数据类型用作属性的类型注释。
  • 34. 2.4 运算符与表达式学习一门编程语言,首先要弄清楚的就是如何对其中的数据进行运算。使用表达式来表达想要达到的效果,使用运算符来进行相关的运算,这就是数据运算的关键。本节主要介绍常用的运算符的用法。
  • 35. 2.4.1 运算符和表达式基础知识运算符是可以通过给出的一个或者多个值来产生另一个值的东西。可以说它是一种特殊的函数。其中的值称为“操作数”,具体包括字面值、变量和表达式。 运算符分为三种:一元运算符、二元运算符、三元运算符。一元运算符只运算一个值,例如递增运算符++;二元运算符比较常见,ActionScript 3.0中大部分运算符都是二元运算符;三元运算符具有三个操作数,例如条件运算符(?:)具有3个操作数。
  • 36. 2.4.2 赋值运算符赋值运算符有两个操作数,它根据一个操作数的值对另一个操作数进行赋值操作。ActionScript中的赋值运算有12个, 赋值运算符运算符执行的运算= 赋值*= 乘法赋值/= 除法赋值%= 求模赋值+= 加法赋值-= 减法赋值<<= 按位向左移位赋值>>= 按位向右移位赋值>>>= 按位无符号向右移位赋值&= 按位"与"赋值^= 按位"异或"赋值|= 按位"或"赋值
  • 37. 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;
  • 38. 2.4.4 算术赋值运算符算术赋值运算符和算术运算符对应,共有5个,分别为+=、-=、*=、/=和%=。和赋值运算符一样,运算符的左边只能是变量。右侧是一个要值、变量或表达式。 这种类型的赋值运算符有时也叫做自赋值运算符,就是利用自己进行运算并赋值给自己。比如下面的代码语句: a+=1; 其要表达的运算过程就是下面的的代码要执行的运算过程。 a=a+1;
  • 39. 2.4.5 关系运算符关系运算符用于比较两个操作数的值的大小关系。常见的关系运算符一般分为两类:一类用于判断大小关系,一类用于判断相等关系。其具体情况如下: 判断大小关系:>大于运算符、<小于运算符、>=大于等于运算符、<=小于等于运算符。 判断相等关系:==等于运算符、!=不等于运算符、===严格等于运算符、!==严格不等于运算符。 关系运算符左右两侧可以是数值、变量或者表达式。关系表达式的结果是Boolean值,flase或者true。 1.判断大小关系的运算符 2.判断相等关系的运算符:
  • 40. 2.4.6 逻辑运算符逻辑运算符有3个,分别为:&&逻辑“与”运算符、||逻辑“或”运算符和!逻辑“非”运算符。逻辑运算符常用于逻辑运算,运算的结果为Boolean型。 逻辑与(&&)和逻辑或(||)运算表达式要求左右两侧的表达式或者变量必须是Boolean型的值。 &&:左右两侧有一个为flase,结果都为flase;只有两侧都为true,结果才为true。 ||:左右两侧有一个为true,结果都为true;只有两侧都为false,结果才为false。
  • 41. 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
  • 42. 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
  • 43. 2.4.9 三元条件运算符?:运算符是唯一的一个三元运算符,也就是说,这个运算符有三个操作数。具体的语法格式如下: (条件表达式)?(表达式1):(表达式2) 格式说明如下: 条件表达式:判断表达式,通过逻辑判断,得到一个Boolean型的结果。 表达式1:判断表达式的结果为true,执行该语句。 表达式2:判断表达式的结果为false,执行该语句。
  • 44. 2.4.10 其它运算符在ActionScript3.0中还有几个常见的运算符,如:typeof、is、as。下面对这几个运算符进行简单的说明: 1.typeof运算符:typeof用于测试对象的的类型,使用的方法如下: typeof(对象); 2.is运算符:is运算符用于判断一个对象是不是属于一种数据类型,返回Boolean型变量。如果对象属于同一类型,则返回true,否则返回false。 3.as运算符:as运算符和is运算符的使用格式相同,但是返回的值不同。如果对象的类型相同,返回对象的值;若不同,则返回null。
  • 45. 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 等于== != === !== 按位"与"& 按位"异或"^ 按位"或"| 逻辑"与"&& 逻辑"或"|| 条件?: 赋值= *= /= %= += -= <<= >>= >>>= &= ^= |= 逗号,
  • 46. 第3章 AS3.0程序设计任何一门编程语言都要设计程序问题,ActionScript 3.0也不例外。在本章中,将介绍ActionScript3.0系统的基本语句以及程序设计的一般过程。首先介绍一下程序控制的逻辑运算,然后着重介绍条件语句和循环语句。
  • 47. 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。
  • 48. 3.2 程序的三种结构在程序设计的过程中,如果控制程序,如何安排每句代码执行的先后次序,这个先后执行的次序,称之为“结构”。常见的程序结构有三种:顺序结构、选择结构和循环结构。本节将逐个介绍一下这三种程序结构的概念和流程。
  • 49. 3.2.1 顺序结构顺序结构最简单,就是按照代码的顺序,一句一句的执行操作,结构如图3-1所示。 ActionScript代码中的简单语句都是按照顺序进行处理,这就是顺序结构。请看下面的示例代码。 //执行的第一句代码,初始化一个变量 var a:int; //执行第二句代码,给变量a赋值数值1 a=1; //执行第三句代码,变量a执行递加操作 a++;
  • 50. 3.2.2 选择结构当程序有多种可能的选择时,就要使用选择结构。选择那一个,要根据条件表达式的计算结果而定。结构如图所示。
  • 51. 3.2.3 循环结构循环结构就是多次执行同一组代码,重复的次数由一个数值或条件来决定。结构如图所示。
  • 52. 3.3 选择程序结构选择程序结构就是利用不同的条件去执行不同的语句或者代码。ActionScript 3.0有三个可用来控制程序流的基本条件语句。其分别为if..else条件语句、if..else if条件语句、switch条件语句。本节将详细讲解这三种不同的选择程序结构。
  • 53. 3.3.1 if..else 条件语句if..else条件语句判断一个控制条件,如果该条件能够成立,则执行一个代码块,否则执行另一个代码块。 if..else条件语句基本格式如下: if(表达式){  语句1 } else  { 语句2; }
  • 54. 3.3.2 if..else if..else语句if..else条件语句执行的操作最多只有两种选择,要是有更多的选择,那就可以使用if..else if..else条件语句。
  • 55. 3.3.3 Switch语句Switch语句相等于一系列的if..else if..语句,但是要比if语句要清晰的多。switch 语句不是对条件进行测试以获得布尔值,而是对表达式进行求值并使用计算结果来确定要执行的代码块。 Switch语句格式如下: switch (表达式) { case:  程序语句1; break; case:  程序语句2; break; case:  程序语句3; break; default: 默认执行程序语句; }
  • 56. 3.4 循环程序结构在现实生活中有很多规律性的操作,作为程序来说就是要重复执行某些代码。其中重复执行的代码称为循环体,能否重复操作,取决于循环的控制条件。循环语句可以认为是由循环体和控制条件两部分组成。 循环程序结构的结构一般认为有两种: 一种先进行条件判断,若条件成立,执行循环体代码,执行完之后再进行条件判断,条件成立继续,否则退出循环。若第一次条件就不满足,则一次也不执行,直接退出。 另一种是先执行依次操作,不管条件,执行完成之后进行条件判断,若条件成立,循环继续,否则退出循环。
  • 57. 3.4.1 for循环语句for循环语句是ActionScript编程语言中最灵活、应用最为广泛的语句。for循环语句语法格式如下: for(初始化;循环条件;步进语句) {   循环执行的语句; } 格式说明如下: 初始化:把程序循环体中需要使用的变量进行初始化。注意要使用var关键字来定义变量,否则编译时会报错。 循环条件:逻辑运算表达式,运算的结果决定循环的进程。若为flase,退出循环,否则继续执行循环代码。 步进语句:算术表达式,用于改变循环变量的值。通常为使用++(递增)或--(递减)运算符的赋值表达式。 循环执行的语句:循环体,通过不断改变变量的值,已达到需要实现的目标。
  • 58. 3.4.2 while循环语句while循环语句是典型的“当型循环”语句,意思是当满足条件时,执行循环体的内容。while循环语句语法格式如下: while(循环条件) { 循环执行的语句 } 格式说明如下: 循环条件:逻辑运算表达式,运算的结果决定循环的进程。若为true,继续执行循环代码,否则退出循环。 循环执行的语句:循环体,其中包括变量改变赋值表达式,执行语句并实现变量赋值。
  • 59. 3.4.3 do..while循环语句do…while循环是另一一种while循环,它保证至少执行一次循环代码,这是因为其是在执行代码块后才会检查循环条件。do…while循环语句语法格式如下: do { 循环执行的语句 } while (循环条件) 循环执行的语句:循环体,其中包括变量改变赋值表达式,执行语句并实现变量赋值。 循环条件:逻辑运算表达式,运算的结果决定循环的进程。若为true,继续执行循环代码,否则退出循环。
  • 60. 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); }
  • 61. 3.4.5 循环的嵌套嵌套循环语句,就是在一个循环的循环体中存在另一个循环体,如此重复下去直到循环结束为止,即为循环中的循环。以for循环为例,格式如下所示。 for (初始化; 循环条件; 步进语句) { for (初始化; 循环条件; 步进语句) { 循环执行的语句; } }
  • 62. 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); }
  • 63. 第4章 函数函数在程序设计的过程中,是一个革命性的创新。利用函数编程,可以避免冗长、杂乱的代码;利用函数编程,可以重复利用代码,提高程序效率;利用函数编程,可以便利的修改程序,提高编程效率。 函数(Function)的准确的定义为:执行特定任务,并可以在程序中重用的代码块。ActionScript 3.0中有两类函数:“方法”和“函数闭包”。具体是将函数称为方法还是函数闭包,取决于定义函数的上下文。
  • 64. 4.1 定义函数在ActionScript 3.0中有两种定义函数的方法:一种是常用的函数语句定义法;一种是ActionScript中独有的函数表达式定义法。具体使用哪一种方法来定义,要根据编程习惯来选择。一般的编程人员使用函数语句定义法,对于有特殊需求的编程人员,则使用函数表达式定义法。
  • 65. 4.1.1 函数语句定义法函数语句定义法是程序语言中基本类似的定义方法,使用function关键字来定义,其格式如下所示。 function 函数名(参数1:参数类型,参数2:参数类型…):返回类型{ //函数体 } 代码格式说明: function:定义函数使用的关键字。注意function关键字要以小写字母开头。 函数名:定义函数的名称。函数名要符合变量命名的规则,最好给函数取一个与其功能一致的名字。 小括号:定义函数的必需的格式,小括号内的参数和参数类型都可选。 返回类型:定义函数的返回类型,也是可选的,要设置返回类型,冒号和返回类型必须成对出现,而且返回类型必须是存在的类型。 大括号:定义函数的必需格式,需要成对出现。括起来的是函数定义的程序内容,是调用函数时执行的代码。
  • 66. 4.1.2 函数表达式定义法函数表达式定义法有时也称为函数字面值或匿名函数。这是一种较为繁杂的方法,在早期的ActionScript版本中广为使用。其格式如下所示。 var 函数名:Function=function(参数1:参数类型,参数2:参数类型…):返回类型{ //函数体 } 代码格式说明: var:定义函数名的关键字,var关键字要以小写字母开头。 函数名:定义的函数名称。 Function:指示定义数据类型是Function类。注意Function为数据类型,需大写字母开头。 =:赋值运算符,把匿名函数赋值给定义的函数名。 function:定义函数的关键字,指明定义的是函数 小括号:定义函数的必需的格式,小括号内的参数和参数类型都可选。 返回类型:定义函数的返回类型,可选参数。 大括号:其中为函数要执行的代码。
  • 67. 4.1.3 两种定义方法的区别和选择原则上,推荐使用使用函数语句定义法。因为这种方法更加简洁,更有助于保持严格模式和标准模式的一致性的。 下面要讲解的是函数语句和函数表达式定义法之间存在的区别,具体内容如下所示。 1.两种方法区别 2.两种方法的选择 在两种定义方法的选择上,一般使用函数语句定义法。函数表达式定义函数主要用于:一是适合关注运行时行为或动态行为的编程,二是用于那些使用一次后便丢弃的函数或者向原型属性附加的函数。函数表达式更多地用在动态编程或标准模式编程中。
  • 68. 4.2 调用函数函数只是一个编好的程序块,在没有被调用之前,什么也不会发生。只有通过调用函数,函数的功能才能够实现,才能体现出函数的高效率。通过本节的学习,读者将掌握一般的函数调用方法以及嵌套和递归调用函数的方法。
  • 69. 4.2.1 函数的一般调用对于没有参数的函数,可以直接使用该函数的名字,并后跟一个圆括号(它被称为“函数调用运算符”)来调用。 下面定义一个不带参数的函数HelloAS(),并在定义之后直接调用,其代码如下。 function HelloAS() { trace("AS3.0世界欢迎你!"); } HelloAS(); 代码运行后的输出结果,如下所示。 /输出:AS3.0世界欢迎你!
  • 70. 4.2.2 嵌套和递归调用函数嵌套和递归调用是两种类似函数调用方式,其本质都是在调用函数时用一个函数就调用另一个函数。不同的是,嵌套调用是用一个函数去调用另一个函数,而递归调用是函数调用自身函数。 1.嵌套调用函数 2.递归调用函数
  • 71. 4.3 函数的返回值主调函数通过函数的调用得到一个确定的值,此值被称为函数的返回值。利用函数的返回值,可以通过函数进行数据的处理、分析和转换,并能最终获取想要获得的结果。在本节我们主要学习函数返回值的获取方法和获取过程中的注意事项。
  • 72. 4.3.1 return语句AS从函数中获取返回值,使用return语句来实现,语法格式如下: return 返回值 return:函数返回值的关键字,必须的。 返回值:函数中返回的数据,既可以是字符串、数值等,也可以是对象,如数组、影片简介等。 下面定义一个求圆形面积的函数,并返回圆面积的值,其代码如下: function 圆面积(r:Number):Number{ var s:Number=Math.PI*r*r return s } trace(圆面积(5))
  • 73. 4.3.2 返回值类型函数的返回类型在函数的定义中属于可选参数,如果没有选择,那么返回值的类型由return语句中返回值的数据类型来决定。 下面的代码,return语句返回一个字符型数据,来验证一下返回值的类型。 function 类型测试() { var a:String="这是一个字符串"; return a; } trace(typeof(类型测试())); 代码运行后的输出结果,如下所示。 string
  • 74. 4.4 函数的参数函数通过参数向函数体传递数据和信息。ActionScript 3.0对函数的参数增加了一些新功能,同时也增加了一些限制。有大多数程序员都熟悉的按值或按引用传递参数这一概念,也有对很多人很陌生的arguments对象和...(rest)参数。
  • 75. 4.4.1 传递参数的语法函数中传递的参数都位于函数格式的括号中,语法格式如下: (参数1:参数类型=默认值,参数2:参数类型=默认值) 下面定义一个个性化的欢迎语句,对不同的姓名给出对应的问候。代码如下所示。 function Welcome(username:String):void { trace("欢迎你!"+username); } Welcome("张三"); Welcome("小明"); 代码运行后的输出结果,如下所示。 欢迎你!张三 欢迎你!小明
  • 76. 4.4.2 传递参数的的两种方法许多编程语言中,参数的传递基本都是两种类型:按值或者按引用传递。按值传递意味着将参数的值复制到局部变量中以便在函数内使用。按引用传递意味着将只传递对参数的引用,而不传递实际值。要了解任何一门编程语言中的函数,首先必须搞清楚的问题就是参数的传递到底是按值还是按引用来传递参数。 在ActionScript 3.0 中,所有的参数均按引用传递,因为所有的值都存储为对象。基元型数据是不变的对象,按按值还是按引用的效果一样,通常可以看作是按值传递。按值传递,就是指参数被传递给函数后,被传递的变量就独立了。若在函数中改变这个变量,原变量不会发生任何的变化。----引用传递会改变原值???
  • 77. 4.4.3 给函数设置默认参数在ActionScript 2.0中并不支持对函数设置默认参数,此为ActionScript 3.0的新功能。要给一个函数的参数设置默认值,语法格式如下: function(参数1:参数类型=默认值,参数2:参数类型=默认值) 默认参数是可选项,可以设置默认参数,也可以不设置默认参数。若设置了默认参数,则在调用函时,若果没有写明参数,系统将使用在函数定义中为该参数指定的值。
  • 78. 4.4.4 arguments 对象和...(rest) 参数ActionScript3.0中有两种函数调用时检查参数数量的方法,分别为使用arguments对象和..(rest) 参数。 1.arguments 对象 在函数中,可以使用arguments 对象来访问有关传递给该函数的参数的信息。arguments 对象是一个数组,其中按顺序保存着传递给函数的所有参数。可以使用数组的访问方式来访问传入的参数。它有一个length属性记录当前传入的参数数目;还有一个属性callee提供对函数本身的引用,该引用可用于递归调用函数表达式。---有待解释 2....(rest)参数 ...(rest)参数是ActionScript3.0引入的新参数声明。使用该参数可指定一个自己命名的数组参数来接受任意多个以逗号分隔的参数。
  • 79. 第5章 事件的发送和处理事件处理系统是交互式程序设计的重要基础。利用事件处理机制,可以方便的相应用户输入和系统事件。ActionScript 3.0的事件机制基于文档对象模型(DOM3),是业界标准的事件处理体系结构。使用机制不仅方便,而且符合标准。ActionScript 3.0全新的事件处理机制是ActionScript编程语言中的重大改进,对ActionScript程序设计人员来说,在使用上也更加的方便和直观。
  • 80. 5.1 事件处理基础在本节将介绍事件和处理的基本概念,了解常见的事件处理任务。对照ActionScript编程语言中不同版本的事件处理机制的异同,明确ActionScript 3.0中事件处理机制具有良好的性能。
  • 81. 5.1.1 事件和事件处理基础知识事件和事件处理是面向对象编程的基础。本节将介绍事件和事件处理的基础知识以及事件处理的方法和事件处理的任务。 1.事件和事件处理基本概念 2.ActionScript 3.0中的事件和事件处理 3.ActionScript 3.0中的事件处理任务 在ActionScript 3.0编程过程中,常见的使用事件处理的任务有: 编写代码以响应事件 阻止代码响应事件 处理事件对象 处理事件流 从类中调度事件 创建自定义事件类型
  • 82. 5.1.2 早期 ActionScript 版本中的事件处理ActionScript 1.0使用on()和onClipEvent()两个事件处理函数来处理事件。具体为: on()事件处理函数,直接放在按钮或者影片剪辑实例上。 onClipEvent()处理函数,直接放在影片剪辑实例上。 这种方法把代码直接夹在实例上,简单易于、方便直接,但是由于分散在各个不同的元件之上,难以管理和维护。特别是处理不是本人编写的代码,查看和找寻会浪费太多的宝贵时间。 在ActionScript2.0中对事件处理进行了改进,增加了一些事件处理机制,具体为: 回调函数事件:onload、oninit、onComplete等。 事件侦听器:addListener()、addEventListener()。
  • 83. 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中,只有函数或方法可以是事件侦听器。
  • 84. 5.2 Event类在ActionScript 3.0的事件处理系统中,事件对象主要有两个作用:一是将事件信息储存在一组属性中,来代表具体事件;二是包含一组方法,用于操作事件对象和影响事件处理系统的行为。 在ActionScript 3.0中,在Flash播放器的应用程序接口中,有一个Event类,作为所有事件对象的基类,也就是说,程序中所发生的事件都必须是Event类或者其子类的实例。
  • 85. 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的事件流机制有关,在平时用到的不多。
  • 86. 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属性结合使用,用于取消事件的默认行为的发生。
  • 87. 5.2.3 Event类的子类对于很多事件来说,使用Event类的一组属性就已经足够了。但是,Event类中的属性无法捕获其它事件具有的独特的特性,比如鼠标的点击事件,键盘的输入事件等。ActionScript 3.0的应用程序接口特意为这些具有显特征的事件准备了Event类的几个子类。这些子类主要包括: 鼠标类:MouseEvent。 键盘类:KeyBoardEvent。 时间类:TimerEvent。 文本类:TextEvent。
  • 88. 5.3 事件侦听器事件侦听器也就是以前版本中的事件处理函数,是事件的处理者,负责接受事件携带的信息,并在接受到该事件之后执行事件处理函数体内的代码。 添加事件侦听的过程有两步:第一步是创建一个事件侦听函数,第二步是使用addEventListener()方法在事件目标或者任何的显示对象上注册侦听器函数。
  • 89. 5.3.1 创建事件侦听器事件侦听器必须是函数类型,可以是一个自定义的函数,也可以是实例的一个方法。创建侦听器的语法格式如下: function 侦听器名称(evt:事件类型):void{…} 语法格式说明如下: 侦听器名称:要定义的事件侦听器的名称,命名需符合变量命名规则。 evt:事件侦听器参数,必需。 事件类型:Event类实例或其子类的实例。 void:返回值必须为空,不可省略。
  • 90. 5.3.2 管理事件侦听器在ActionScript3.0中使用IEventDispatcher接口的方法来管理侦听器函数,主要用于注册、检查和删除事件侦听器。 1.注册事件侦听器:addEventListener()函数用来注册事件侦听函数。注册侦听器的语法格式如下: 事件发送者.addEventListener(事件类型,侦听器); 2.删除事件侦听器:removeEventListener()函数用来删除事件侦听器函数。删除侦听器的语法格式如下: 事件发送者.removeEventListener(事件类型,侦听器); 3.检查事件侦听器:HasEventListener()方法和willTragger()方法,都可以用来检测当前的事件发送者注册了何种事件类型的侦听器。 检查事件侦听器语法格式如下: 事件发送者.hasEventListener(事件类型);
  • 91. 5.4 事件处理类型ActionScript3.0使用单一事件模式来管理事件,所有的事件都位于flash.events包内,其中构建了20多个Event类的子类,用来管理相关的事件类型。在本节介绍常用的鼠标事(MouseEvent)件类型、键盘事件(KeyboardEvent)类型和事件事件(TimerEvent)类型和帧循环(ENTER_FRAME)事件。
  • 92. 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:定义鼠标滑出事件
  • 93. 5.4.2 键盘事件键盘操作也是Flash用户交互操作的重要事件。在ActionScript 3.0中使用KeyboardEvent类来处理键盘操作事件。它有两种类型的键盘事件:KeyboardEvent.KEY_DOWN 和 KeyboardEvent.KEY_UP。 KeyboardEvent.KEY_DOWN:定义按下键盘时事件 KeyboardEvent.KEY_UP:定义松开键盘时事件 注意:在使用键盘事件时,要先获得它的焦点,如果不想指定焦点,可以直接把stage作为侦听的目标。
  • 94. 5.4.3 时间事件在ActionScript3.0中使用Timer类来取代ActionScript之前版本中的setinterval()函数。而执行对Timer类调用的事件进行管理的是TimerEvent事件类。要注意的是,Timer类建立的事件间隔要收到SWF文件的帧频和Flash Player的工作环境(比如计算机的内存的大小)的影响,会造成计算的不准确。 Timer类有两个事件,分别为: TimerEvent.TIMER:计时事件,按照设定的事件发出。 TimerEvent.TIMER_COMPLETE:计时结束事件,当计时结束时发出
  • 95. 5.4.4 帧循环ENTER_FRAME事件帧循环ENTER_FRAME事件是ActionScript 3.0中动画编程的核心事件。该事件能够控制代码跟随Flash的帧频播放,在每次刷新屏幕时改变显示对象。 使用该事件时,需要把该事件代码写入事件侦听函数中,然后在每次刷新屏幕时,都会调用Event. ENTER_FRAME事件,从而实现动画效果。
  • 96. 第6章 面向对象编程基础面向对象的编程,其英文是“Object-Oriented Programming”,简写为OOP。它以对象为基本单元来进行代码划分,组织程序代码。ActionScript3.0是一个完全标准的面向对象编程语言。面向对象编程在Flash5已经开始支持,可惜语法不是业界传统的编程语言格式,在Flash5和Flash MX中编写面向对象的编程非常的不方便。ActionScript2.0在面向对象的编程上有很大的进步,但是由于其使用的并不完全符合标准,存在很多的问题。现在ActionScript3.0的推出基本解决了ActionScript2.0中存在的问题,并有了很多的改进,而且相对于其它的OOP语言,其更简单易学。
  • 97. 6.1 面向对象编程技术概述面向对象编程中最重要也最难以理解的概念就是“对象”。对象,指的是具有某种特定功能的程序代码。 对象(Object)具体可以指一件事、一个实体、一个名词,一个具有自己的特定标识的东西。比如汽车、人、房子、桌子、植物、支票、雨衣等等都是对象。对象就是一种客观存在,可能有时你觉得虚无飘渺,但是却的的确确存在着。 任何一个对象都有其属性。以人为例,人有身高、体重、性别、血型、年龄等等,这些都反映了人作为一个社会存在所共有的特性。把这些特性反映到编程语言中,这些特性就是属性,用来反映某一个对象的共有特点。
  • 98. 6.2 类对象是抽象的概念,要想把抽象的对象变为具体可用的实例,则必须使用类。使用类来存储对象可保存的数据类型,及对象可表现的行为信息。要在应用程序开发中使用对象,就必须要准备好一个类,这个过程就好像制作好一个元件并把它放在库中一样,随时可以拿出来使用。本节从类的基本概念着手,逐步介绍类的定义方法和类的使用方法。
  • 99. 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)的名称。 构造函数。 属性:包括实例属性和静态属性。 方法:包括实例方法和静态方法。
  • 100. 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后面的大括号内写入对类定义的内容,包括构造函数,属性和方法。
  • 101. 6.2.3 创建类的实例类是为了使用而创建的,要使用创建好的类,必须通过类的实例来访问。要创建类的实例,需要执行下面的步骤: (1)使用import关键字导入所需的类文件。其用法格式如下所示。 import 类路径.类名称; (2)使用new关键字加上类的构造函数。其用法格式如下: var 类引用名称:类名称=new 类名称构造函数();
  • 102. 6.2.4 包块和类在ActionScript 3.0中,包路径是一个独立的模块,单独用一个包块来包含类,不再作为类定义的一部分。定义包块使用package关键字,其用法格式如下所示。 package 包块路径{ //类体 } 用法示例代码: package com.lzxt.display{ //类体 }
  • 103. 6.2.5 包的导入在ActionScript 3.0中,要使用某一个类文件,就需要先导入这个类文件所在的包,也就是要先指明要使用的类所在的位置。 通过情况下,包的导入有这样的三种情形: 1.明确知道要导入哪个包,直接导入单个的包 例如说要创建一个绘制对象,那么只需导入Display包中的Shape包即可。代码如下所示。 import flash.display.Shape; 2.不知道具体要导入的类,使用通配符导入整个包 例如需要一个文本的控制类,但是并不知道该类的具体名称,那么就可以使用“*”通配符进行匹配,一次导入包内的所有类。具体使用代码如下所示。 import flash.text.* 3.要使用同一包内的类文件,则无需导入 如果现在有多个类位于计算机中的同一个目录下,则这些类在互相使用的时候,不需要导入,直接使用即可。
  • 104. 6.2.6 构造函数构造函数是一个特殊的函数,其创建的目的是为了在创建对象的同时初始化对象,即为对象中的变量赋初始值。 在ActionScript 3.0编程中,创建的类可以定义构造函数,也可以不定义构造函数。如果没有在类中定义构造函数,那么编译时编译器会自动生成一个默认的构造函数,这个默认的构造函数为空。构造函数可以有参数,通过参数传递实现初始化对象操作。 下面的示例列出两种常用的构造函数代码: //空构造函数 public function Sample(){ } //有参数的构造函数 public function Sample(x:String){ //初始化对象属性 }
  • 105. 6.2.7 声明和访问类的属性在编程语言中,使用属性来指明对象的特征和对象所包含的数据信息以及信息的数据类型。在定义类的过程中,需要通过属性来实现对象特征的描述和对象信息数据类型的说明。比如在创建一个关于人的类的过程中,就需要说明人这一对象的“性别”特征,需要说明人的“年龄”这一数据的数据类型是一个数字等等。本节将介绍声明和访问类属性的方法。 在ActionScript 3.0的类体中,一般在class语句之后声明属性。类的属性分两种情况:实例属性和静态属性。实例属性必须通过创建该类的实例才能访问,而静态属性则不需要创建类实例就能够访问。 声明实例属性的语法格式如下所示。 var 属性名称:属性类型; var 属性名称:属性类型=值; public var 属性名称:属性类型=值;
  • 106. 6.2.8 声明和访问类的方法在编程语言中,使用方法来构建对象的行为,即用来表示对象可以完成的操作。在编程过程过程中,通过对象的方法,告诉对象可以做什么事情,怎么做。比如在创建一个关于人的类的过程中,就需要知道人能够干什么事情,这就是人这一对象的方法。比如人张口说话,举手等等行为,都需要通过方法来表示。 在ActionScript 3.0中,声明类实例方法的格式和上面函数的格式类似,格式如下所示。 function 方法名称(参数…):返回类型{ //方法内容 }
  • 107. 6.2.9 类的使用在ActionScript 3.0中,创建好的类一般有3种使用方法:作为文档类进行文档类绑定;作为库中元件的类进行绑定;作为外部类使用import关键字导入。下面结合实例具体的来说一下这3种用法。 1.文档类 文档类是ActionScript 3.0的新特色,该特色是为实现代码与文档分离而设计的。 2.与库文件绑定 与fla文件库中的影片剪辑进行绑定,每个影片剪辑只能绑定一个类。 3.import导入类
  • 108. 6.2.10 包外类在ActionScript 3.0中,一个类文件中可以定义多个类,但是包块内只能定义有一个类,此为主类。主类的名称一定要和类文件的名称相同,这个类是供外部使用的。在包块之外,还可以定义多个类,这些类的名称和类文件的名称不同,而且只能由当前类中的成员可以访问。这种类,有些资料称其为包外类,有些资料称其为助手类。在这里笔者使用包外类这一名称。
  • 109. 6.3 接口接口可以看作是一个对象之间相互联系的纽带,起一个桥梁的作用。通过接口中方法声明的集合,能够使互不相干的对象之间相互通信。 接口和类存在着一些类似的地方,也由一定的区别。 接口仅仅声明方法而不提供实现的方法,要实现方法,需要在该接口的类中声明和实现。 接口方法的实现无任何属性,但在接口类的定义中,实现的方法必须为public。 可通过extends语句由接口继承实现多个接口,也可以通过implements语句由类继承实现。 接口是一个定义类方法组的数据类型,可作为类型注释。
  • 110. 6.3.1 接口的定义定义接口的方法和定义类相似,不过需要使用interface关键字来实现。 接口可以包含实例方法、静态方法、getter和setter方法。 接口也需要保存为as文件,文件名必须和接口名保持一致,完全相同。 定义接口的语法格式如下所示。 package 包路径{ 访问控制 interface 接口名称{ function 实例方法名(参数:参数类型):返回类型; static function 静态方法名(参数:参数类型):返回类型; function get 方法名():返回类型; function set 方法名(参数:参数类型):void; } }
  • 111. 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("男人说话直截了当!"); } } }
  • 112. 6.4 继承继承(Inheritance)是面向对象技术的一个重要的概念,也是面向对象技术的一个显著特点。继承是指一个对象通过继承可以使用另一个对象的属性和方法。准确的说,继承的类具有被继承类的属性和方法。被继承的类,称为基类或者超类,也可以称为父类;继承出来的类,称为扩展类或者子类。
  • 113. 6.4.1 继承的定义类的继承要使用extends关键字来实现。其语法格式如下所示。 package{ class 子类名称 extends 父类名称{ } } 下面的示例创建一个新类Man,它继承自Person类,这样Man类就是子类,而Person类就是父类。用法示例代码如下: package{ class Man extends Person{ } }
  • 114. 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世界"); } } }
  • 115. 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("这是重写过的走路方法"); } } }
  • 116. 6.5 AS3.0命名空间在ActionScript3.0中引入了命名空间的概念,使用命名空间,可以控制标识符的可见性,可以管理各个属性和方法的可见性。不管命名空间是在的内部还是外部,都可以应用于代码。ActionScript 3.0中有4个访问控制符,分别为:public、private、internal和protected。这4个访问控制符就是一种命名空间,同样,也可以定义自己的命名空间。本节就来介绍一下自定义命名空间和应用命名空间的方法。
  • 117. 6.5.1 命名空间的定义命名空间常见的情况有两种:一是将命名空间定义到一个独立的as文件中,该命名空间能够使不同的包进行访问;二是将命名空间定义在类体中,该命名空间仅在本类中进行访问。 1.将命名空间定义在一个独立的as文件中 下面的示例定义一个lzxt命名空间,代码如下所示。 package{ //定义命名空间 public namespace lzxt = "http://www.flacs.cn/" } 说明:从上例可以看出,定义一个命名空间需要使用namespace关键字。 2.将命名空间定义在类体中
  • 118. 6.5.2 使用命名空间若在类体中定义命名空间,则可以像访问控制符一样的使用,在定义的属性或者方法之前加上命名空间就ok了。如下面的代码: package { class SampleSpace { //定义命名空间 namespace lzxt lzxt var name:String=“浪子啸天” //使用自定义命名空间控制方法 lzxt function welcome():void { trace("欢迎使用自定义命名空间"); } } }
  • 119. 第7章 AS3.0显示编程ActionScript 3.0的显示功能有了很大的革新,原有的显示结构发生了重大的改变。对于熟悉了ActionScript以前版本中MovieClip影片剪辑控制和使用的AS程序人员来说,这次革新将导致一个新的学习过程。ActionScript 3.0显示编程的内容主要是关于如何使用ActionScript来生成和控制各种图形、动画等显示对象。显示对象通常指的是显示在Flash Player舞台上的可视化的对象。
  • 120. 7.1 显示对象简介显示对象(Display Object),指的是可以在舞台显示的一切对象,包括可以直接看得见的图形、动画、视频、文字等,也包括一些看不见的显示对象容器。在ActionScript 3.0中,任何的复杂的图形都是由显示对象和显示对象的容器共同构成。
  • 121. 7.1.1 AS3.0中显示对象的等级结构编译完成的SWF文件,以最根部的stage(舞台)为基础,展现出不同的显示效果。利用ActionScript 3.0构建的Flash播放文件都有都有一个由显示对象构成的层次结构,这个结构称为“显示列表”。这个显示列表按照一定的等级和层次在舞台上显示出来,构成复杂的显示对象。 ActionScript 3.0 支持的显示对象的结构类似于“树状结构”,以舞台为根,SWF文件为干,显示对象为枝叶。具体结构见图所示。
  • 122. 7.1.2 显示对象的种类在ActionScript3.0中,所有的显示对象都属于同一个类:DisplayObject类。所有的显示对象都是其子类。本节将对显示对象的种类进行简单的介绍,并且进行简要的分类。 1.显示对象的具体种类 2.显示对象分类
  • 123. 7.1.3 显示列表在前文中已经说到,ActionScript 3.0支持的显示对象的结构类似于“树状结构”,这上面的所有的显示对象和容器,就构成了显示列表。显示列表是ActionScript 3.0中的一个新概念。显示列表就是一个显示对象的清单,只要在Flash Player中显示出来的对象,都是该显示列表中的内容。 在ActionScript 3.0中,显示对象能否显示出来,取决于是否加入了显示列表。如果加入了显示列表,该对象就会被显示出来;否则,即使该对象已经被创建,也不能被显示出来。 ActionScript3.0显示列表进行了以下方面的改进,具有明显的优点。 1.呈现方式更为有效且文件较小,有效的提高了性能。 2.改进的深度管理,使层级管理更加容易 3.完整遍历显示列表,使对象的访问更方便 4.列表外的显示对象,方便了显示对象的管理 5.更便于创建显示对象的子类,创建可视化对象更容易
  • 124. 7.2 显示对象的一些基本概念在舞台上看到的显示对象,都有它们各自的属性,如位置、大小、透明度等等。这些属性都来自于显示对象的基类DisplayObject,该类总结了大部分显示对象的共有的特征和行为。特征对应于显示对象的属性,行为对应于显示对象的方法。 在ActionScript 3.0中,DisplayObject类共有25个属性,6个方法和6个事件。下面将简单介绍一些常用的属性和方法,对于复杂的应用,将在后面的章节结合具体的实例讲解。
  • 125. 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:鼠标相对于当前显示对象注册点之间的竖直距离。
  • 126. 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。这些属性在后面的章节中根据需要进行讲解。
  • 127. 7.2.2 显示对象的方法显示对象的基本方法有6个,常用的方法如下: (1)getBounds()方法:返回一个矩形区域,该矩形定义相对于显示对象所在坐标系的显示对象区域。 (2)getRect()方法:返回一个矩形区域,该矩形定义相对于显示对象所在坐标系的显示对象区域,注意该区域不包含形状上的笔触宽度。 (3)hitTestObject()方法:返回一个Boolean值,若为true,表示两个对象重叠或相交,否则为不相交。 (4)hitTestPoint()方法:返回一个Boolean值,若为true,表示该对象对应点重叠或相交,否则为不相交。
  • 128. 7.2.3 显示对象的事件显示对象的事件有6个,常见的如下: (1)added事件:将显示对象添加到显示列表中时会调度该时间。下面的两种方法会触发此事件:将显示对象添加到容器、将显示对象添加到容器的某一层次。 (2)addedToStage事件:将显示对象直接添加到舞台显示列表或将包含显示对象的子对象添加至舞台显示列表中时会调度该事件。下面的两种情况下会触发此事件:将显示对象添加到容器、将显示对象添加到容器的某一层次。 (3)removed事件:要从显示列表中删除显示对象时会调度该事件。以下两种情况下会生成此事件:将显示对象容器的某个显示对象删除、将显示对象容器中的某个层次的显示对象删除。 (4)removedFromStage事件:要从显示列表中删除显示对象或者删除包含显示对象的子对象时会调度该事件。以下两种情况下会生成此事件:将显示对象容器的某个显示对象删除、将显示对象容器中的某个层次的显示对象删除。 (5)enterFrame事件:播放头进入新帧时调度该事件。若播放头不移动,或者只有一帧,则会继续以帧频调度此事件。 (6)render事件:在显示器述评之前调度该事件。当使用render事件的显示对象进入舞台时,或者显示对象存在于显示列表时才会触发该事件。要保证render事件在当前帧触发,必须调用stage.invalidate()。
  • 129. 7.3 管理显示对象显示对象只有显示在屏幕之上,才能达到要实现的效果。显示对象容器就是用来储存和显示显示对象的对象。要实现在显示对象容器中显示对象,就需要把显示对象加入到显示对象列表中。本节主要介绍如何添加和删除显示对象,如何通过深度管理对象以及如何访问显示对象。
  • 130. 7.3.1 容器的概念所有的显示对象都要放入显示对象容器中才能够显示,为了方便区分,把显示对象容器简称为容器。容器是可以嵌套的,容器中可以放置非容器显示对象,也可以放置子容器对象。 容器的主要功能有一下几点: 提供访问、添加、删除显示对象的功能。 具有深度管理功能。 其中深度管理也就是管理容器中子对象的叠放次序。所谓的叠放次序,表示显示对象重叠时从前到后的显示顺序。处于显示顺序最前面的完整显示,后面的对象依次被前面的对象遮挡,甚至有的不能显示出来。
  • 131. 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.将显示对象添加到指定位置
  • 132. 7.3.3 删除显示对象要移除位于显示对象列表中的显示对象,需要使用容器类的removeChild()和removeChildAt()方法。 1.移除指定名称的显示对象 要移除已经知道显示对象名称的显示对象,可以使用显示对象类的removeChild()方法其用法格式如下: 容器对象.removeChild(显示对象) 2.删除指定索引的显示对象要删除指定位置索引的显示对象,可以使用显示对象类的removeChildAt()方法。其用法格式如下所示。 容器对象.removeChildAt(位置索引)
  • 133. 7.3.4 深度管理深度,也就是前文所说的位置索引,用于说明同一个容器中同一级别的所有显示对象从前到后的叠放次序。 在ActionScript 3.0中,使用了全新的深度管理体系和轻巧的深度管理方法,使我们可以很方便和舒适的添加和访问对象。此深度管理体系有两个重要的特点: 深度由各自的容器对象所管理。每一个容器都知道自己有多少个子对象,这个数目记录在自己容器的numChildren属性中。每一个对象在容器显示列表中的位置索引代表了其深度值。每一个容器的深度范围为0~numChildren-1。 添加显示对象会自己调整各个显示对象的深度,避免层次冲突。比如某一个深度已经有了一个显示
  • 134. 7.3.5 访问显示对象要访问加入到容器中的显示对象,可以通过3种方法来实现:通过深度访问、通过名字访问和通过全局坐标访问。 1.通过深度访问显示对象:通过深度来访问显示对象,要使用getChildAt()方法。用法格式如下: 容器对象.getChildAt(深度) 2.通过名字访问显示对象:每一个显示对象都有一个名称,该名称可以使用该显示对象的name属性进行访问和设置。在创建显示对象的时候,可以指定显示对象的名字,也可以不指定显示对象的名字。若没有指定,Flash Player会自动的分配给该显示对象一个默认的名字,如:“instance1”“instance2”等。 3.通过坐标访问显示对象:在ActionScript 3.0中,可以通过坐标来访问置于该坐标之上的所有显示对象。getObjectsUnderPoint()方法的用法格式如下: 容器对象. getObjectsUnderPoint(点对象);
  • 135. 7.4 处理显示对象显示对象放在舞台之后,可以进行大量的操作,比如改变对象的位置、透明度、颜色,可以使显示对象旋转,也可以控制拖动显示对象。这些都要通过DisplayObject类及其子类的属性和方法来实现。本节通过一些实例,介绍使用这些属性和方法控制显示对象发生变化的方法。
  • 136. 7.4.1 改变对象的位置要改变一个显示对象的位置,只用调整显示对象的横坐标x和纵坐标y这两个属性就可以了。注意x和y属性始终是指显示对象相对于其父显示对象坐标轴的(0,0)坐标的位置。 下面的实例在舞台创建一个显示对象圆和四个箭头对象。通过点击四个箭头控制圆上下左右移动。使用文档类:SetXY,
  • 137. 7.4.2 缩放显示对象若要缩放显示对象,可以采用两种方法来缩放显示对象的大小:使用尺寸属性(width和height)或缩放属性(scaleX和scaleY)。 width和height属性使显示对象的宽和高,它们以象素为单位,可以通过指定新的宽度和高度值来缩放显示对象、 scaleX和scaleY属性是指显示对象的显示比例,是一个浮点数字,最小值为0,最大不限,值为1表明和原始大小相同。缩放值大于1表示放大显示对象,小于1表示所需显示对象。 这两种方法都可以缩放显示对象,在使用一种属性进行缩放的时候,另一种属性的值也会对于发生变化。比如使用尺寸属性改变显示对象时,修改width的值为width/2,则该显示对象的缩放属性scaleX将变为0.5。
  • 138. 7.4.3 旋转显示对象若要旋转显示对象,可使用显示对象的rotation属性来实现。如果要旋转某一个显示对象,可以将此属性设置为一个数字(以度为单位),表示要应用于该对象的旋转量。
  • 139. 7.4.4 淡化显示对象Flash之所以“闪”,透明度alpha这个属性起到了至关重要的左右。使用该属性可以使显示对象部分透明或者全部透明,也可以通过alpha属性控制显示对象的淡入淡出。alpha属性的值是0到1之间的浮点数。0表示完全透明,1表示完全不透明。 下面的实例实现这样的效果:鼠标滑上显示对象时,该显示对象透明度变为原来的一半;鼠标滑出显示对象时,该显示对象的透明度变为完全不透明。使用文档类:SetAlpha,代码如下所示。
  • 140. 7.4.5 拖曳显示对象在ActionScript 3.0中,只有Sprite及其子类才具有StartDrag()、StopDrag()方法和dropTarget属性。也就是说,只有Sprite及其子类才可以被拖动,执行拖曳动作。ActionScript3.0中的StartDrag()方法的参数和使用格式如下所示。 显示对象.startDrag(锁定位置,拖动范围); 格式说明如下: 显示对象:Sprite对象及其子类生成的对象 锁定位置:Boolean值,true表示锁定对象到鼠标位置中心,false表示锁定到鼠标第一次单击该显示对象所在的点上。可选参数,不选默认为flase。 拖动范围:Rectangle 矩形对象,相对于显示对象父坐标系的一个矩形范围。可选参数,默认值为不设定拖动范围。
  • 141. 7.4.6 遮罩显示对象遮罩(mask),是Flash中常用的一种图形处理技术。具体是指一个显示对象用作遮罩来创建一个孔洞,透过该孔洞使另一个显示对象的内容可见。具体的说,就是一个显示对象作为窗口,透过这个窗口显示另一个显示对象的内容。注意:用于遮罩的显示对象是不会出现在显示屏幕中的。 在ActionScript 3.0中,遮罩效果要使用显示对象的mask属性来实现。用法格式如下: 显示对象1.mask=显示对象2; 若不想继续使用遮罩,那么将显示对象的mask属性设置为null即可。用法格式如下: 显示对象1.mask=null;
  • 142. 7.4.7 碰撞检测在ActionScript3.0 中,所有的显示对象都可以作为检测和被检测的对象来检测碰撞。其方法有两种,用法格式如下: 显示对象1.hitTestObject(显示对象2); 说明:该方法用于检测两个显示对象是否发生碰撞,返回一个Boolean值,若为true,表示两个对象发生了碰撞,否则为没有碰撞。 显示对象.hitTestPoint(x,y,检测方法);
  • 143. 第8章 使用与控制影片剪辑在Adobe Flash CS3 Professional中创建的动画和影片剪辑元件都是MovieClip,即影片剪辑。在ActionScript 3.0中,MoveClip是Sprite类的子类,其地位和重要性都大大的降低。对于面向对象编程的程序人员来说,它的用处已经不大;但是对于习惯在Flash中创建动画,并使用代码进行控制的动画设计人员来说,它还是有着非常重要的作用。 本章着重介绍在Flash事件轴上添加事件和方法来操作和控制影片剪辑;同时也从面向对象的角度着手,使用外部的文档类来操作影片剪辑,实现文档与代码分离。
  • 144. 8.1 影片剪辑基础知识影片剪辑(MovieClip)类是ActionScript用来控制Flash创作的动画元素的重要工具。通过MovieClip类的属性和方法,可以控制影片剪辑的播放与停止,正放和倒放,也可以动态的控制影片剪辑的播放顺序。本节将介绍影片剪辑的基础知识和MovieClip类的属性和方法。
  • 145. 8.1.1 MovieClip简介MovieClip类在ActionScript 1和ActionScript 2中是所有舞台上的实例的基类,所有的舞台元件都通过MovieClip类的属性和方法进行控制。在ActionScript 3.0中,影片剪辑只是舞台中众多显示对象的一种,其使用主要用于需要时间轴支持的显示对象,对于不需要事件轴的显示对象,尽可能的使用Shape类或者Sprite类以提高显示性能。 只要是在Flash中创建的影片剪辑元件,Flash就会自动的将该元件添加到文档的库中。MovieClip会默认其为该类的一个实例,也就具有了该类的属性和方法。 将库中的影片剪辑的实例放在舞台上时,如果该影片剪辑有多帧,那么它会按照其时间轴进行循环播放,除非通过使用ActionScript代码进行控制。作为独有的功能,只有MovieClip类的对象可以使用Flash创作工具创建的动画效果。其它的显示对象类的实例都不能创建时间轴动画,要创建动画,只能使用编程方式来实现。
  • 146. 8.1.2 处理MovieClip对象在Flash中使用编译器把fla文件发布为SWF文件时,舞台上的所有影片剪辑实例都会转为MovieClip(影片剪辑)对象。利用“属性”面板中的“实例名称”文本输入框指定影片剪辑的实例名称,进而通过访问该名称实现对其访问和控制。如果该影片剪辑中还嵌套有其它的影片剪辑,则通过使用点语法加影片剪辑来访问和控制。比如下面的代码通过点语法控制mc影片剪辑中的mc1影片剪辑执行播放动作。代码如下所示。 mc.mc1.play()
  • 147. 8.2 影片剪辑基本控制影片剪辑的控制,主要指控制影片剪辑的播放和影片剪辑基本属性的变换。通过变换产生一定的动画效果。本节是为刚学习Flash动画,需要使用帧代码控制影片剪辑的读者准备的。当然本节也会从面向对象的角度,使用文档类实现相同的效果。
  • 148. 8.2.1 影片剪辑的播放控制影片剪辑的播放控制,主要是指控制影片和影片剪辑的播放、停止、前进、后退、倒放和跳转。通过这些操作,控制影片剪辑的播放流程和顺序,进而实现不同的动画需求。 本节通过一个简单的控制动画实例,说明这些MovieClip类方法的基本使用方法。由于本书以ActionScript编程为主,所以时间轴动画的制作过程不再介绍,只讲解影片剪辑控制过程中所需要的代码。
  • 149. 8.2.2 动态加载并控制库中的影片剪辑在ActionScript 2.0中被广泛使用的duplicateMovieClip()、attachMovieClip()函数在ActionScript3.0中已经被去掉了。现在要实现相同的效果需要从库中建立类链接,然后通过使用new语句创建该类的实例实现类似于复制的效果。
  • 150. 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类的播放控制方法控制外部影片的播放。
  • 151. 第9章 AS3.0动画编程动画是Flash创作的基础,从最初的帧补间动画到现在的动画编程,Flash动画制作走出了一条非常圆满的道路。ActionScript 3.0的动画编程主要关注两方面的情形:一是通过改变显示对象的属性创建动画效果;二是利用Shape类的绘制类进行代码绘制,渲染效果。 ActionScript 3.0动画编程要涉及数学、物理学等方面的内容非常的多,也比较复杂。在本章先介绍两种基本的动画实现原理并创建简单的动画效果。对于数学和物理学的基础知识,则留到后面的章节具体详细的讲述。
  • 152. 9.1 可视化动画编程简介动画是指控制显示对象随着时间不断的发生变化,这些变化可能是位置的变动,速度的变化,外观形状的改变,颜色透明度的改变等等。总而言之,动画可以实现的形式是纷繁多样的。借用一句口语“只有想不到,没有做不到”,只要能够想到的效果,在Flash中都能够实现。 最早版本的Flash中,使用逐帧动画和补间动画来实现动画效果,一个显示对象放于一个关键帧上,然后插入另一个关键帧,改变第二个关键帧中显示对象的显示属性,然后两帧之间通过差值计算形成完整的事件轴动画。 可视化的动画编程,伴随ActionScript脚本语言的出现开始逐渐的兴起。从早期ActionScript中的“三帧法”动画编程,逐步发展到onClipEvent(enterframe)、onEnterFrame循环事件,ActionScript动画编程中帧循环起着至关重要的作用。
  • 153. 9.2 动画编程原理和所有的动画显示一样,Flash的动画原理也是通过不断的刷新屏幕,利用每次屏幕上显示对象位置的不同、大小色彩的变化等产生动画效果。动画编程的关键是一定要有变化,而且该变化需要在一定时间内来完成。Flash中使用帧频来控制每秒钟刷新屏幕的次数,通过使用的帧频的范围在12~60帧每秒,推荐使用的是24帧每秒这样的一个速度。 ActionScript 3.0的动画编程也是同样的原理,通过不断的刷新屏幕来实现动画效果。 ActionScript 3.0的动画编程按照实现的方式可以分为两种: 对显示对象的显示属性进行控制,调整每次刷新屏幕时显示对象的显示属性实现动画效果,这种称为显示属性动画。 利用绘制API在每帧中使用代码绘制不同的形状,从而产生的动画效果,这种称为代码绘制动画。 通过编程实现刷新屏幕,ActionScript 3.0中提供了两种方式可供选择: 帧循环更新:利用Flash本身的帧频速度,在每次刷新屏幕时改变显示对象。此方法需要使用事件侦听器侦听显示对象的Event.ENTER_FRAME事件。 定时器更新:利用Timer类的定时更新功能,每隔一定的事件使显示对象改变一次。此方法需要使用事件侦听器侦听显示对象的TimerEvent.TIMER事件。
  • 154. 9.3 代码绘制动画效果代码绘制动画效果,就是每帧绘制的图形有所变化,这样播放起来就形成了动画。绘制代码主要使用Graphics类的绘制API来进行绘制。 下面创建一个非常流行的电流动画效果。其实现原理为:首先在水平方向每隔3个像素进行绘制,而竖直方向的绘制点可以在一个位置附近随机变化,这样形成一条随机弯曲的线条;然后使用帧循环事件,每帧重新绘制一次,实现线条的随机变化,进而实现最终的电流效果。
  • 155. 9.4 改变对象属性本节将通过改变舞台的显示属性来实现一系列的动画效果。这些效果大体分为两部分:一部分是与运动相关的动画,主要是通过修改显示对象的坐标来实现。此部分将会介绍一些物理运动学的基础知识。另一部分通过改变显示对象的缩放属性、旋转属性和透明度属性,实现显示和形状动画Ч
  • 156. 9.4.1 移动物体要实现移动舞台的效果,只需改变坐标属性即可。修改横坐标可以实现水平运动的效果,修改纵坐标可以实现竖直运动的效果。 在物理学中,物体运动的快慢是用速度来描述的。速度反映了物体在单位时间内发生的位移的大小。对于匀速运动的物体,位移的大小等于速度乘以时间。 在Flash中,实现物体的运动,运算的原理是:确定速度大小,帧循环刷新时原来的位置坐标加上速度的值。 原理主要公式如下: var _vx:Number=水平速度值 var _vy:Number=竖直速度值 显示对象.x+=vx 显示对象.y+=vy
  • 157. 9.4.2 加速运动的物体在物理学中,物体运动的快慢是用速度来描述的,而速度变化的快慢是用加速度来描述的。加速度反映了物体在单位时间内速度变化的快慢。 加速度和速度关系的公式为: v=v+a vx+=ax vy+=ay
  • 158. 9.4.3 减速运动的物体物理学中,简单的减速运动和加速运动一样,利用加速度的值来改变速度的值,进而实现物体的位置变化。但加速运动加速度为正值,减速运动的加速度为负值。当然,也可以通过速度减去一个正的加速度实现减速运动的效果。 减速运动中加速度(此处按照加速度为正值)和速度关系的公式为: v=v-a vx-=ax vy-=ay
  • 159. 9.4.4 鼠标跟随缓动效果在Flash中最常见的缓动效果,就是一个显示对象先快后慢,逐渐的移动到目的地。这也是一个减速运动的过程,不过运动过程中的加速度会发生改变。 二次缓动是最常用的,通过每次前进当前位置和目标位置之间距离的二分之一,如此重复的操作,知道最后无限的接近目标点。但是这样永远无法实现达到目标点,所以一般控制当前位置和目标位置之间的距离小于1象素时,可以近似认为已经达到了目标点。 二次缓动的计算公式为: dx=目标位置.x-当前位置.x dy=目标位置.y-当前位置.y vx=(dx)/2 vy=(dy)/2
  • 160. 9.4.5 利用三角函数实现运动效果数学中三角函数的正弦和余弦函数是对物体的运动非常有用的函数。这两个函数都具有周期性,其值范围为-1~1,而且由于周期性,其值能够在-1~1之间循环变化。利用这些特点,可以实现显示对象周期性的往复运动效果。关于三角函数的知识请参见《数学和数字》一章的内容。 下面的示例利用正弦三角函数实现小球在平衡位置附近的往复运动。其实现流程为:创建一个小球→加入场景→创建帧循环事件处理函数→利用帧循环事件,实现小球的运动。使用文档类:MoveSin,
  • 161. 9.4.6 缩放动画效果要实现缩放效果,只需实现不断修改显示对象的缩放属性scaleX和scaleY即可。 下面的示例通过修改矩形的scaleY属性,实现矩形缩放效果。其实现流程为:创建一个小球→加入场景→创建帧循环事件处理函数,实现缩放操作→利用帧循环事件,实现小球的缩放。使用文档类:Scale,
  • 162. 9.4.7 旋转动画效果要实现旋转一个显示对象的动画效果,只需要修改rotation属性即可。 下面的示例用一个箭头来实现鼠标跟随效果,跟随鼠标的箭头的指向会随着鼠标位置的变化而发生旋转。其实现流程为:创建一个小球→加入场景→创建帧循环事件处理函数,实现旋转效果→利用帧循环事件,实现小球的旋转。使用文档类:Rotation,
  • 163. 9.4.8 淡入淡出动画效果淡入淡出效果也是Flash动画制作中最常用的一种技术,此技术的实现是通过改变显示对象的透明度alpha属性实现的。 下面的示例实现小球的淡入淡出效果。创建一个小球→加入场景→创建帧循环事件处理函数,实现显示对象透明度先逐渐增加,当透明度为1时逐渐减少,减少到1时再逐渐增加,通过循环实现淡入淡出效果→利用帧循环事件,实现小球的淡入淡出。使用文档类:Alpha,
  • 164. 9.5 借助Timer类实现动画效果使用Timer类产生的动画效果和使用帧循环ENTER_FRAME事件产生动画的原理一样,都是通过间隔一定的时间进行一次刷屏来实现动画效果。上一节中使用帧循环事件创建的一切动画,都可以是Timer类的事件来实现。 要注意Timer类的TimerEvent.TIMER事件,可能与Flash的刷屏不同步,会产生延迟现象。所以在使用的时候,需要使用updateAfterEvent()方法强制更新屏幕。 使用Timer类实现动画还有几个好处: 可以利用Timer.stop()方法控制动画的播放与停止; 可以在构建Timer对象时控制动画的刷新次数,实现预期动画效果; 可以利用TimerEvent.TIMER_COMPLETE事件,在停止播放时侦听,从事开始新的动作。
  • 165. 9.6 Tween类创建动画效果在ActionScript 2.0中内建的Tween类都被转移到了ActionScript 3.0的fl. transitions包中,用于实现运动、变形等动画效果。本节主要介绍常用的运动、变形Tween类。
  • 166. 9.6.1 Tween类应用基础在ActionScript 3.0中,使用Tween类,可以通过指定操作目标的影片剪辑属性在一定的帧数或者时间内创建动画效果,进而实现影片剪辑的运动动画,缩放动画,淡入淡出动画等显示效果。 在Tween类中还可以指定缓动方法,从而实现非线形变化效果。“缓动”是指动画在运行期间的速度非线形变化,使动画显得更加的形象逼真。Tween类中的缓动方法位于fl.transitions.easing包中,该包提供了多种缓动方法供用户使用。 要利用Tween类创建动画效果,需要先创建一个Tween对象,使用该对象来指定要控制的显示对象的属性要发生什么样的变化。创建Tween类对象的方法如下所示。 Tween(目标对象,目标对象的属性,缓动方式,初始值,结束值,动画持续时间,记时方式);
  • 167. 9.6.2 运动折返效果返回类实现的动画是在动画执行的开始端、结束端或者两端兼有回返动作,用以模拟溢出动画效果。执行动画的方法取决于三个缓动函数: easeIn:在动画开始时往后运动,然后反向朝目标移动。 easeOut:在动画结束时稍微冲过结束点,然后倒转方向回来朝着目标。 easeInOut:在动画开始时先向后运动,再倒转方向并朝目标移动,结束时冲过目标,然后再倒转方向,朝目标移动。
  • 168. 9.6.3 运动回弹效果回弹类实现的动画是在动画的起始端,结束端或者两端兼有执行回弹动画效果。具体在何端回弹同样取决于三个缓动函数。回弹的次数取决于动画持续的时间,持续的时间越长,回弹的次数越多。此效果可以实现舞台中小球跳动的动画效果。 Bounce类的三个回弹函数效果: easeIn:在动画开始时以较慢速度开始回弹运动,然后再执行时加快运动速度。 easeOut:在动画结束时以较快速度开始回弹运动,然后再执行时减慢运动速度。 easeInOut:在动画开始时缓慢地开始跳动,进行加速运动,最后进行减速。
  • 169. 9.6.4 正弦弹性效果Elastic类实现的动画是在动画的起始端,结束端或者两端兼有执行弹性动画效果,运动方式按照正弦波逐渐衰减进行。具体在何端回弹同样取决于三个缓动函数。回弹的次数不受动画持续的时间影响。此效果也可以实现舞台中小球跳动的动画效果。 Elastic类的三个回弹函数效果,此类和Bounce基本类似,区别在与弹性采用正弦方式: easeIn:在动画开始时以较慢速度开始回弹运动,然后再执行时加快运动速度。 easeOut:在动画结束时以较快速度开始回弹运动,然后再执行时减慢运动速度。 easeInOut:在动画开始时缓慢地开始跳动,进行加速运动,最后进行减速。
  • 170. 9.6.5 Regular和Strong运动效果Regular类实现的动画是加速运动、减速运动和先加速后减速的动画效果。具体在方式同样取决于三个缓动函数。 Regular类的三个回弹函数效果: easeIn:在动画开始时做初速度为零的加速运动。 easeOut:动画执行匀减速运动,末速度为零。 easeInOut:在动画开始时做初速度为零的加速运动,然后做减速运动,直到速度为零。
  • 171. 9.6.6.线性运动效果None类实现的是一种线形运动的效果,显示对象一直做运动运动。其方法函数有四种easeIn()、easeOut()、easeInOut()和easeNone(),这四种方法实现的是相同的效果,在执行时都是匀速直线运动。使用时可以任意选择。
  • 172. 9.7 TransitionManger创建动画效果在ActionScript 2.0中内建的TransitionManger类也被转移到了ActionScript 3.0的fl. transitions包中,用于实现页面切换动画效果。本节主要介绍常用的TransitionManger类。
  • 173. 9.7.1 TransitionManger用法基础TransitionManger类管理了一系列的过渡动画效果。通过使用这些效果,可以很方便的实现页面之间的切换操作。 TransitionManger类提供了10中不同的切换效果,把这些切换效果应用于影片剪辑,就能实现很漂亮的过渡效果。这些类同样位于fl.transitions包中。 要使用TransitionManger类实现过渡动画效果,需要先创建该类的实例。ActionScript 3.0中创建改类的实例的方法有两种。 TransitionManager.start()方法,用法格式如下所示。 TransitionManager.start(目标影片,过渡对象参数); 目标影片:指过渡效果作用的影片。注意,只能时影片剪辑实例。 过渡对象参数:对象,包含所有的过渡参数的集合。对象应包含type参数,该参数指示要应用的过渡效果类。此外,还必须包括该过渡效果类所必需的任何参数。
  • 174. 9.7.2 遮帘过渡Blinds效果此过渡实现影片剪辑逐渐消失或逐渐出现的矩形来显示的过渡动画效果,类似于百叶窗效果。该过渡对象参数为: type:Blinds, direction:Transition.IN,duration:2,easing:None.easeNone,numStrips:10,dimension:0; 参数说明: type:指明采用10种过渡效果中的那一种,所有的过渡效果共有参数。 direction:有两种形式Transition.IN和Transition.OUT,指明过渡动画的方向,共有参数。 duration:过渡动画持续时间,共有参数。 easing:过渡动画补间效果,fl.transitions或fl.transitions.easing 包中的一种效果,共有参数。 numStrips:“遮帘”效果中的遮罩条纹数,推荐在1~50之间,独有参数。 dimension:指明遮罩条纹是垂直的(0)还是水平的(1),独有参数。
  • 175. 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});
  • 176. 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});
  • 177. 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(圆形)的遮罩形状。
  • 178. 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});
  • 179. 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});
  • 180. 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度。
  • 181. 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});
  • 182. 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。
  • 183. 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});
  • 184. 第10章 数组数组是具有相同数据类型的数据的集合,是编程语言中最重要的数据结构之一。数组可以有效的管理具有相同类型的数据,可以缩短和简化程序。数组按照功能,可以分为简单的索引数组和复杂的关联数组。数组按照数组维数不同,也可以分为一维数组和多维数组。数组中存储的数据没有类型限制,无论是数组、字符串还是对象,都可以存储道数组中。
  • 185. 10.1 数组基础知识数组(Array)类在ActionScript 3.0中是顶级类,直接继承自Object类。利用数组的容器功能,可以在其中储存大量数据。 数组一般分类两类:索引数组和关联数组。 索引数组:数组中的每个元素都存储在指定编号的位置中,这个位置称为该数组的索引。数组的元素都用唯一的整数下标来索引。该索引的起始值为0,每个元素保存在索引指定的位置。多维数组也可以通过索引来访问数组,也是索引数组。 关联数组:数组中的每个元素都有对应的键值,此键值为唯一的字符串,作为数组元素的索引。关联数组是Object类的实例,每个键值都与一个属性名称对应。关联数组就是键和值对的无序集合。
  • 186. 10.2 索引数组索引数组主要是利用一个无符号的整数索引值来访问和处理数组。索引的第一个值为0,最后一个元素的索引为数组length-1。本节利用数组索引来对数组进行相关操作,实现对数组的分析和处理,实现对数组的有效管理。
  • 187. 10.2.1 创建和访问数组创建数组的方法有两种:一是利用构造函数创建;二是利用中括号赋值来创建。 构造函数创建数组的代码如下: var _arr:Array=new Array() //创建一个空数组 var _arr:Array=new Array(3) //创建一个长度为3的数组,数组中的元素为空 var _arr:Array=new Array(1,2,3,4) //创建一个数组,并直接对该数组赋值
  • 188. 10.2.2 在数组中新增元素在ActionScript 3.0中,能够给数组新增元素的方法有三种,分别为:push()、unshift()和splice()方法。这三种向数组添加新元素的方法,push()方法实现向数组尾部添加新元素,unshift()方法实现向数组的头部添加新元素,splice()实现向数组中的指定位置添加新元素。 1.向数组尾部添加新元素 2.向数组头部添加新元素 3.向数组中指定位置添加新元素
  • 189. 10.2.3 删除数组中的元素在ActionScript 3.0中,能够删除数组中元素的方法也有三种,分别为:pop()、shift()和splice()方法。pop()方法用于删除数组的最后一个元素,shift()方法用于删除数组中的第一个元素,splice()方法则用于删除数组中指定位置的一个或多个元素。 1.删除数组尾部元素 2.删除数组头部元素 3.删除数组指定位置元素
  • 190. 10.2.4 对数组进行排序ActionScript 3.0的数组排序方法比ActionScript2.0更加的强大。共有三种方法,分别为:reverse();sort()和sortOn()方法。reverse()方法用于实现数组的翻转,sort()方法实现数组按指定方式排序,sortOn()方法则实现按数组指定属性进行排序。本节还介绍了数组随机排序的方法。 1.数组翻转 2.数组排序 3.数组属性排序 4.数组随机排序
  • 191. 10.2.5 从数组中查找元素要从数组中查找指定的元素,可以使用indexof()方法和lastIndexof()方法来实现,也可以使用for循环语句、if条件语句和break跳出语句来自定义方法来实现。 1.indexof()方法和lastIndexof()方法 2.自定义方法查找数组。
  • 192. 10.2.6 数组比较要比较两个数组,必须使用循环来比较数组中的每一个元素是否相等,如果所有的元素都相等,则数组相等,否则不相等。 下面的示例来比较两个数组是否相等,代码如下所示。 (详细内容请参照本书)
  • 193. 10.2.7 从数组中获取元素从数组中获取元素的方法有两种,一种是利用slice()方法获取指定索引后的全部或一部分元素,并组成新的数组,另一种方法是使用循环并返回符合条件的元素组成的新数组。 1.slice()方法 slice()方法从原数组中获取一定范围内的元素并组成新数组返回,此过程并不修改原数组中的元素。其用法格式如下所示。 数组名.slice(开始位置,结束位置) 2.自定义方法获取数组中的元素 slice()方法是从一个指定位置到另一个指定位置之间获取元素,但不能只利用开始位置获取指定数量的元素。
  • 194. 10.2.8 复制数组数组是引用型数据类型,直接引用该数组变量会在使用的过程中造成不必要的麻烦。所以通常使用concat()方法或者slice()方法来实现对数组的赋值,当然也可以通过自定义的方法来复制数组。 1.concat()方法:concat()方法复制数组,其实质为将一个空元素与原数组相连接,而组成一个新的数组,只是由于该方法没有提供参数,所以产生的新数组和原数组相同,从而实现了数组的复制效果。其用法格式如下所示。数组名.concat() 2.slice()方法:slice()方法复制数组的实质为:从数组中截取指定的元素而返回一个新的数组,在没有指定截取位置和截取数目的情况下,截取的是数组中的全部元素,这样就实现对数组的真正复制效果。其用法格式如下所示。数组名.slice() 3.自定义方法实现数组的复制:自定义数组复制方法Earray.duplicate()方法,使用for循环语句,把原始数组中的元素全部添加到新数组当中,并返回新的数组。
  • 195. 10.2.9 数组转换为字符串要实现把数组转换为字符串,ActionScript3.0提供了两种方法,分别为:toString()方法和join()方法。toString()方法是将数组中的元素使用逗号连接起来,转为字符串;而join()方法的实质是将数组中的元素使用指定的字符将数组连接起来,连接的字符是可以任意设置的。 1.toString()方法 toString()方法把数组转换为字符串,其用法格式如下: 数组名.toString() 2.join()方法 join()方法同样可以将数组中的元素转换为字符串。其用法格式如下所示。 数组名.join(分隔符号)
  • 196. 10.3 关联数组关联数组是以指定的名称为索引的数组,数组中的每一个元素都是键/值对应。关联数组类似于哈希表或映射。关联数组中使用字符作为元素的索引,该字符通常称为关键字或者属性。本节将介绍创建关联数组的方法和访问关联数组的方法。
  • 197. 10.3.1 创建关联数组在ActionScript 3.0中,关联数组是Object类的实例,所以创建关联数组不是使用Array类而是Object类。要创建关联数组,有三种方法可以选择:利用Object构造函数创建、使用对象文本创建和使用数组元素创建。 1.利用Object构造函数:构造函数创建关联数组,其格式如下所示。 var 对象数组:Object={关键字1:值,关键字2:值} 2.使用对象文本创建关联数组:该方式在创建时先创建一个对象,不需要初始化对象数据,在使用时再动态的添加关键字和值。 3.使用数组元素创建关联数组:该方式同样先创建一个空白的对象,然后使用数组操作符[]把关联数组的关键字和值追加到关联数组中。
  • 198. 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"])
  • 199. 10.4 多维数组多维数组是将其它数组作为其元素的一种数组,也就是数组嵌套数组的数组。最常见的多维数组是二维数组,本节将着重介绍一下二维数组的定义和访问的方法。
  • 200. 10.4.1 创建多维数组在ActionScript 3.0中,并没有提供一个直接创建多维数组的方法。要使用多维数组,通常通过使用其它的方法组合来实现。常用的方法有以下几种: 1.数组嵌套方法 2.追加数组方法 3.循环嵌套方法
  • 201. 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
  • 202. 第11章 数学与数字数学和数字是密不可分的,数字是数学的基础,数学是数字的具体体现。对于任何一门编程语言来说,数学都是编程语言的根本。利用数学公式进行计算、转换,从而能实现各种运动转换效果。在ActionScript 3.0中,数字的应用非常广泛,比如使用十六进制数字表示颜色,使用二进制数进行位运算操作等等。数学的应用更是普遍,Flash中大量动画效果都是通过数学运算实现的。
  • 203. 11.1 Flash坐标系统坐标是显示编程的根本,利用坐标才能把显示对象有效的显示与舞台之上。本节将介绍最基础的数学坐标系,Flash中的坐标系,以及极坐标系,并说明各种坐标系之间的相互转换的方法。
  • 204. 11.1.1 笛卡儿坐标系—数学坐标系笛卡儿坐标系是应用最为广泛的坐标系,数学中的坐标系就是笛卡儿坐标系。笛卡儿坐标系如图所示。 坐标系说明: x轴和y轴:该坐标系有x轴和y轴,在x轴上的值,从左到右逐渐增大,y轴上的值从上到下逐渐减小。该坐标系中任意一点的位置对应于坐标(x,y)。两个坐标轴在坐标(0,0)相交,该点称为坐标原点。 角度:该坐标系中的角度从+x方向开始,逆时针旋转的角度逐渐增大,旋转一周,角度为360度。 坐标象限:x轴和y轴将坐标系分为四部分,每一部分为一个象限。从右上角开始为第一象限,一次类推,为第二、第三、第四象限。
  • 205. 11.1.2 Flash坐标系Flash中也存在一个和笛卡儿坐标系类似的坐标系,但是这个坐标系和笛卡儿坐标系又有一些重要的不同点。Flash的坐标系如图11-2所示。 坐标系说明: x轴和y轴:Flash中也存在x轴和y轴,其x轴与笛卡儿坐标系相同,都是从左到右,值逐渐增加。但是与笛卡儿坐标系不同,其y轴是从上到下,值逐渐增加。该坐标系中的点同样使用坐标(x,y)来表示,两个坐标轴的交点(0,0)也是坐标原点。 角度:该坐标系的角度也是从+x轴开始,但与笛卡儿坐标系的角度相反,其角度为顺时针旋转,角度逐渐增大。旋转一周360度。注意:在Flash坐标系统中,旋转rotation的角度范围是-180度到180度之间。 坐标象限:为了便于比较,还采用和笛卡儿坐标系相同的象限分法。
  • 206. 11.1.3 极坐标系在数学中,为了表示二维的图形和位置,还有另一种坐标系统,就是极坐标系。极坐标系如图所示。 极坐标系用(r,θ)表示一个点。其中r表示该点与原点之间的距离,称为极径,θ用于指明该点与原点之间的方向。 这种坐标系虽然没有笛卡儿坐标系那么常用,但是Flash中也会遇到,后面介绍向量的时候会再次介绍此方法,在此不再多介绍。
  • 207. 11.1.4 Flash的坐标在Flash的坐标系统中,首先要注意区分舞台上的坐标和显示对象中的坐标。 舞台上的坐标是以舞台的左上角为坐标原点,向右逐渐增大,向下逐渐增大。如图所示。
  • 208. 11.1.5 鼠标位置检测实例在本节将创建一个应用示例,通过侦听鼠标移动事件,不断获取鼠标的相对于舞台和显示对象的坐标,并输出显示。 下面的示例创建一个显示对象,并且在不断移动的过程中显示鼠标的位置。使用文档类:XY,具体实现过程如下所示。
  • 209. 11.2 数学处理Math类是Flash显示编程中使用最为频繁的一个类,也是动画编程中使用最多的一个类。Math类是Flash中的顶级类,共有8个常量、18个方法。此类所有的属性和方法都是静态的。Math类中用于处理数字的方法共11个,分别为:Math.abs()、Math.ceil()、Math.exp()、Math.floor()、Math.log()、Math.max()、Math.min()、Math.pow()、Math.random()、Math.round()和Math.sqrt()。
  • 210. 11.2.1 Math类的常量Math类中共有8个常量,在计算过程中最常用的是Math.PI。具体常量的值及说明见表11-3所示。Math类常量表 常 量说 明E:Number=2.71828182845905自然对数的底的数学常数,表示为eLN10:Number=2.30258509299404610的自然对数的数学常数。LN2:Number=0.69314718055994532的自然对数的数学常数。LOG10E:Number=0.4342944819032518代表常数e(Math.E)以10为底的对数的数学常数。LOG2E:Number=1.442695040888963387常数e以2为底的对数的数学常数。PI:Number=3.141592653589793代表一个圆的周长与其直径的比值的数学常数,圆周率。SQRT1_2:Number=0.7071067811865476代表1/2的平方根的数学常数。SQRT2:Number=1.4142135623730951代表2的平方根的数学常数。
  • 211. 11.2.2 Math.abs()方法Math.abs()为计算绝对值方法。我们都知道数字有正数和负数,那么计算的结果也就有正有负,利用此方法,把负数转换为正数,而正数则不变。 下面的示例对数字使用Math.abs()方法取绝对值。代码如下所示。 var a:Number=5; var b:Number=-5; a=Math.abs(a); trace(a);//输出 5 b=Math.abs(b); trace(b);//输出 5
  • 212. 11.2.3 Math.ceil()方法Math.ceil()方法对指定的参数进行取整操作,取整的规则是取得参数或表达式的上限的整数值,也就是比参数大的那个整数值。 下面的示例对数字使用Math.ceil()方法取整。代码如下所示。 var a:Number=5.45; a=Math.ceil(a); trace(a);//输出 6
  • 213. 11.2.4 Math.exp()方法Math.exp()方法是获取以自然对数的底(e)的x次幂的值,x由参数x指定。 下面的示例使用Math.exp()方法获取自然对数e的3次幂的值。代码如下所示。 var a:Number=3 var b=Math.exp(a); trace(b);//输出20.085536923187675
  • 214. 11.2.5 Math.floor()方法Math.floor()方法和Math.ceil()方法恰好相反,获取一个数字或表达式的一个下限的整数值,也就获取的整数值是比指定的数字小的那一个整数。注意:负数的取法和Math.ceil()的取法一样,只不过是取得一个绝对值大的一个整数。
  • 215. 11.2.6 Math.log()方法Math.log()方法用于获取参数的自然对数的值。 下面的示例使用Math.log()方法获取10的自然对数值。代码如下所示。 var a:Number=10 trace(Math.log(a))//输出:2.302585092994046
  • 216. 11.2.7 Math.max()方法Math.max()方法比较两个或者多个数字(表达式)的大小关系,并返回最大值。 下面的示例使用Math.max()方法比较数字的大小。代码如下所示。 var a:Number=Math.max(5,4) trace(a)//输出为5 var d:Number=10 var b:Number=20 var c=Math.max(d,b) trace(c)//输出为20 var e:Number=Math.max(1,3,5,7,4,10,12,4) trace(e)//输出:12
  • 217. 11.2.8 Math.min()方法Math.min()方法比较两个或者多个数字(表达式)的大小关系,并返回最小值。 下面的示例使用Math.min()方法比较数字的大小。代码如下所示。 var a:Number=Math.min(5,4) trace(a)//输出为4 var d:Number=10 var b:Number=20 var c=Math.min(d,b) trace(c)//输出为10 var e:Number=Math.min(1,3,5,7,4,10,12,4) trace(e)//输出:1
  • 218. 11.2.9 Math.pow()方法Math.pow()方法进行幂运算。参数为有两个,其用格式如下: Math.pow(参数1,参数2) 该方法用来计算参数1的参数2次方,返回计算的结果。 下面的示例使用Math.pow()方法来计算2的3次方。代码如下所示。 //计算2的3次方 var a:Number=Math.pow(2,3) trace(a) //输出为8 var d:Number=3 var b:Number=4 //计算d的b次方 var c=Math.pow(d,b) trace(c)//输出为81
  • 219. 11.2.10 Math.round()方法Math.round()方法采用四舍五入,取得一个表达式或者数字最接近的一个整数。 下面的示例使用Math.round()方法来对数字取整。代码如下所示。 var a:Number=5.45; trace(Math.round(a));//输出:5 a=-5.45; trace(Math.round(a));//输出:-5 a=5.55; trace(Math.round(a));//输出:6 a=-5.55; trace(Math.round(a));//输出:-6
  • 220. 11.2.11 Math.sqrt()方法Math.sqrt()方法用于计算一个数字或表达式的平方根。注意这里的数字或表达式应该是大于或者等于0的数字。 下面的示例使用Math.sqrt()方法来计算2和3的平方根,代码如下所示。 var a:Number=Math.sqrt(2); trace(a);//输出:1.4142135623730951 var b:Number=3; trace(Math.sqrt(b));//输出:1.7320508075688772
  • 221. 11.2.12 随机运动小球实例Math.random()方法是随机函数,用于获取一个介于0和1之间的一个数字,该数字的小数位数为14位。随机函数非常的有用,在Flash编程过程中经常使用,比如初始化显示对象的位置时可以随机的控制显示对象的位置,显示对象运动时可以控制显示对象的速度随机变化。
  • 222. 11.2.13 黑客帝国数字流实例在ActionScript 2.0中有一个使用非常频繁的全局函数random(),用来产生一个大于0,小于参数的随机的整数值。在ActionScript 3.0中random()方法被Math.random()方法所取代,但是Math.random()只能产生一个大于0小于1的小数,不能直接使用。下面在MathR类中扩展Math.random()方法,实现和ActionScript2.0中random()函数同样的功能。 方法名:Random; 原理:用要取得的最大整数值减1乘以Math.random(),获得大于0,小于最大值的一个浮点数,然后使用Math.round()方法对该浮点数进行四舍五入取整。
  • 223. 11.2.14 获取多个随机数字此外,为了应用方便,利用MathR.Random()方法进行扩展,实现了以下几个方法: getrandomrange():获得个介于最小值和最大值之间的一个随机整数。 getrandomdot():获得一个整数位数位m,小数位数位n的随机数。 getrandomT():获得k个可重复的介于最大值和最小值之间的一个数组。 getrandomK():获得k个不重复的介于最大值和最小值之间的一个数组。
  • 224. 11.3 三角函数对ActionScript程序人员来说,三角学和三角函数使最基础的知识。本节先介绍一下直角三角形中的边和角,然后详细介绍Math类中的三角函数。Math类中的三角函数共有7个,分别为:Math.sin()、Math.cos()、Math.tan()、Math.atan()、Math.atan2()、Math.asin()和Math.acos()。
  • 225. 11.3.1 直角三角形三角形是最奸的二维图形之一。平面上不在同一条直线上的三个点,用直线两两相连,就得到了一个三角形。直角三角形中有一个90度角,即直角。直角三角形如图所示。 直角三角形的直角用转角处的一个小正方形表示。三角形的两个直角边分别用a和b表示,最长的边c称为斜边。
  • 226. 11.3.2 角度和弧度在日常生活中我们使用的度量角度的单位是度,一个圆周是360度,不过这个数字是任意规定的。而弧度单位是数学家们定义的测量角度的标准公制单位。弧度是基于π定义的,π是圆的一种固有属性。计算机编程语言在处理角度时都以弧度为单位。在ActionScript 3.0中,Math类在计算时都是以弧度为单位,而显示对象在旋转的时候,其rotation属性是以角度为单位的。 弧度的定义为:两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆的半径时,两条射线的夹角的弧度为1。对应情况如图所示。
  • 227. 11.3.3 正弦函数Math.sin()正弦函数在数学中是这样定义的:在直角三角形中,角θ的正弦等于它的对边和斜边之比。其公式为:
  • 228. 11.3.4 数字天地实例使用正弦函数,可以创作处许多非常漂亮的动画效果。下面使用正弦函数和随机函数,实现一个非常漂亮的Flash效果:数字天地。其实现原理如下: (1)制作一个动态文本,利用帧循环,控制此文本框内的数字在0~9之间随机变换。 (2)控制步骤1中创建的显示对象在舞台上从下到上按照正弦规律循环运动。 (3)初始化舞台,在舞台上每隔3次循环创建一个步骤2中的动画。
  • 229. 11.3.5 余弦函数Math.cos()余弦函数在数学中是这样定义的:在直角三角形中,角θ的余弦等于它的临边和斜边之比。其公式为: 在直角三角形中,边a为角θ的临边,斜边为c,所以计算公式表示为:
  • 230. 11.3.6 圆周运动实例余弦函数和正弦函数的结合应用,能够实现非常重要的沿圆和椭圆的运动。关于圆的半径和三角函数以及坐标的关系,如图所示。
  • 231. 11.3.7 3D文字旋转效果椭圆和正圆相比,区别在于椭圆的水平轴和竖直轴不相等,或者说X半径和Y半径大小不等。所以只需在计算时使用两个不同的半径值就可以了。计算横坐标和纵坐标的公式如下所示。 x=x0+rx*Math.cos(θ) y=y0+ry*Math.sin(θ)
  • 232. 11.3.8 正切函数Math.tan()正切函数在数学中是这样定义的:在直角三角形中,角θ的正切等于它的对边和临边之比。其公式为: 在直角三角形中,边b为θ的对边,边a为角θ的临边, 所以计算公式表示为:
  • 233. 11.3.9 反正切函数Math.atan()和Math.atan2()在前面介绍了对角度计算相应的三角函数值,后面将介绍几个利用三角函数值反过来计算角度值的三角函数。 在ActionScript 3.0中有两个函数可以计算反正切。Math.atan()是其中的一个,其用法格式如下所示。 角度=Math.atan(函数值) 说明:返回的角度是一个弧度值。 用法示例代码如下所示。 trace(Math.atan(1))//输出:0.7853981633974483
  • 234. 11.3.10 跟随鼠标运动爬虫实例下面使用该反正切方法实现一个运动动画效果:跟随鼠标运动爬虫。具体操作过程如下: (1)新建一个Flash文件(ActionScript 3.0),保存文件为:跟随鼠标运动爬虫。 (2)单击【文件】|【导入】|【导入到库】命令,打开【导入到库】对话框,选择一个爬虫图片,单击【打开】按钮,导入到库中。把爬虫图片转换为影片剪辑bug。 (3)打开【库】面板,右键单击“bug”影片剪辑,选择【链接】,打开【链接属性】对话框。在【类】输入文本框中输入Bug,基类保持不变。输入后单击【确定】按钮。如图11-17所示。 (4)单击【文件】|【新建】命令,打开【新建文档】窗口,选择【ActionScript文件】,单击【确定】,新建一个脚本文件,保存为MoveBug。 (5)返回到“跟随鼠标运动爬虫”文档,使用文档类:MoveBug。
  • 235. 11.3.11 反正弦函数Math.asin()和反余弦函数Math.acos()计算角度的正弦和余弦值会得到一个-1~1之间的值。利用这个值,反过来也可以计算角度,这就是反正弦函数Math.asin()和反余弦函数Math.acos(),这两个函数与三角函数的转换关系为: 角计算正弦 值=Math.sin(角) 利用反正弦计算角 角=Math.asin(值) 角计算余弦 值=Math.cos(角) 利用反余弦计算角 角=Math.acos(值)
  • 236. 第12章 Point类与向量Point在英文中的意思是空间的一点,表示地方和位置。在ActionScript 3.0中,Point指显示屏幕上的点,用坐标来表示。坐标用来表示某个点的绝对位置,在游戏中通常用来表示游戏事物的平面位置。在Flash的坐标系统中,Point类用于定义显示屏幕上的位置,也就是坐标。 在现实世界中,有很多量是既有大小,又有方向的。物理学中位移、力、速度、加速度等常见的量都是这样。通常把这种既有大小,又有方向的量叫做向量,也叫矢量。向量有多种,常用的主要是用于二维空间的平面向量和用于空间的三位向量。 本节将结合坐标介绍点坐标与平面向量的关系,以及利用点坐标来进行向量的相关计算。
  • 237. 12.1 点坐标与向量在Flash的坐标系统中,利用点来控制显示对象的位置,这些点都是有水平的横坐标和竖直的纵坐标来组成。该坐标系统中,一个点对应屏幕上一个确定的位置。如图中坐标(x,y)表示的就是P点的位置:Flash坐标系中的点 向量a
  • 238. 12.2 Point类Point类定义一对Flash坐标。它表示二维坐标系中的某个位置。其中x表示水平轴,y表示垂直轴。在ActionScript 3.0中,该类有3个属性,10个方法。
  • 239. 12.2.1 Point对象的创建和获取使用Point类定义坐标,通常使用其构造函数来定义。其用法代码如下所示。 //法一 var point:Point=new Point(x,y) //法二 var point:Point=new Point() point.x=x坐标值 point.y=y坐标值 用法格式说明: 法一:使用Point类的构造函数中的两个参数,对横坐标和纵坐标直接赋值。 法二:使用Point类的构造函数创建一个空对象,然后利用Point对象的两个属性x,y对对象赋值。如果不赋值,则为原点坐标。
  • 240. 12.2.2 点对象的长度使用Point对象的属性length,可以直接获取对象点到坐标原点之间线段的长度。其用法格式如下所示。 var len:Number=p.length 说明:p是一个点对象。 示例代码如下: //使用构造函数直接定义点pt1 var pt1:Point = new Point(10, 20); //获取点pt1的长度 var len:Number=pt1.length trace(len)//输出:22.360679774997898拖不出区域的小球效果图
  • 241. 12.2.3 两点之间的距离使用Point对象的ditance()方法,可以计算两个点之间的距离。其用法格式如下所示。 distance(pt1:Point,pt2:Point) 说明:该方法接受两个参数pt1和pt2,为两个点。 下面的使用distance方法,计算鼠标在舞台上移动的速度。其实现原理为:通过帧循环事件,获取连续两帧之间鼠标位置之间距离,然后使用此距离处于两帧所间隔的时间,获取鼠标移动的速度。
  • 242. 12.2.4 坐标加减运算使用Point对象的add()方法可以实现将一个点的坐标与另一点的坐标相加,并返回一个新的坐标点。使用Point对象的subtract()方法可以实现一个点的坐标减去另一点的坐标,并返回一个新的坐标点。这两种方法的用法格式如下所示。 pt1.add(pt2:Point):Point pt1.subtract(pt2:Point):Point 参数说明: pt1:原始点的坐标。 pt2:要加或者减的坐标。利用坐标运算移动小球
  • 243. 12.2.5 缩放坐标使用Point对象的normalize()方法可以实现将原点和当前点之间线段的长度缩放为指定的长度,缩放后原坐标将发生改变,变为缩放后的坐标。其用法格式如下所示。 pt.normalize(len:Number):viod 参数说明: pt:需要缩放的坐标。 len:缩放的长度。缩放坐标控制小球运动
  • 244. 12.2.6 偏移坐标使用Point对象的offset()方法可以实现当前点坐标偏移一定的水平距离和竖直距离。其用法格式如下所示。 pt.offset(dx:Number, dy:Number):viod 参数说明: pt:需要偏移的坐标。 dx:偏移的横坐标值。 dy:偏移的纵坐标值。 偏移坐标控制小球运动
  • 245. 12.2.7 极坐标转Flash坐标在11.1.3中已经说过,在数学中还有一个极坐标系,其坐标使用(r,θ)表示。Flash的坐标系统与其不相同,在使用时需要进行转换。在ActionScript 3.0中,polar()方法用于实现极坐标和Flash坐标之间的相互转换,该方法返回转换后的坐标。其用法格式如下: Point.polar(r:Number,angel:Number):Point 参数说明: r:极坐标的长度。 angel:极坐标的角度。注意:用弧度表示。日地月旋转系统
  • 246. 12.3 二维向量在第12.1节中介绍过,平面向量可以用坐标来表示,但由于Point类并不能完全实现向量的方法和功能,在这里建立自己的平面向量类V2D,同时介绍向量的基本运算。
  • 247. 12.3.1 V2D类的构造函数构造函数用于定义向量类的名称V2D,并负责实例化对象。初始化的向量采用坐标表示,需定义两个属性x和y,在这里默认为x=0和y=0。V2D类的构造函数代码如下所示。 //定义包 package com.lzxt{ import com.lzxt.MathD; public class V2D { //定义两个属性_x和_y public var _x:Number; public var _y:Number; //构造函数 public function V2D(x:Number=0,y:Number=0) { this._x=x; this._y=y; } } }
  • 248. 12.3.2 向量检查方法toString()使用toString()方法,可以返回向量的字符串表示。当V2D向量对象作为字符串输出时,该方法会自动调用。该方法返回一个类似于坐标的表示。方法代码如下所示。 //toString格式化输出向量坐标,取三位小数输出,原数值不变 public function toString():String { var rx:Number = MathD.sround (_x,3); var ry:Number = MathD.sround (_y,3); return "(" + rx + ", " + ry + ")"; }
  • 249. 12.3.3 向量重置、复制、比较方法向量的重置方法reset(),就是使用新的值来修改原有的值。方法代码如下所示。 //重置 public function reset(xx:Number,yy:Number):void { //使用xx值修改原有的属性_x的值 _x=xx; //使用yy值修改原有的属性_y的值 _y=yy; }
  • 250. 12.3.4 向量加法向量相加要遵循平行四边形法则。法则内容表述如下:已知两个从原点点O出发的两个向量OA、OB,以OA、OB为邻边作平行四边形OACB,则以O为起点的对角线OC就是向量OA、OB的和,这种计算法则叫做向量加法的平行四边形法则。如图所示。向量平行四边形法则
  • 251. 12.3.5 向量减法向量减法的处理方法和向量加法的处理方法类似,只要将两个向量的x分量和y分量相减即可。同样为两个方法,代码如下所示。 //减法,在当前向量上减少,改变当前向量 public function minus(v:V2D):void { _x -= v._x; _y -= v._y; } //加法,返回相减后的新向量 public function minusNew(v:V2D):V2D { return new V2D(_x - v._x,_y - v._y); }
  • 252. 12.3.6 向量翻转翻转一个向量,起始就是把该向量旋转180度。具体计算方法为x变为-x,y变为-y。此种方法实现的是向量的大小不变,方向翻转。同样设计了两个方法,代码如下所示。 //翻转,翻转当前向量 public function negate():void { _x = -_x; _y=-_y; } //翻转,翻转产生新向量 public function negateNew():V2D { return new V2D(- _x,- _y); }
  • 253. 12.3.7 向量缩放向量缩放只改变向量的大小,而保证向量和原向量在同一条直线上,或相同,或相反。向量的缩放按照指定的倍数进行缩放,具体的计算方法是原向量的x分量和y分量都乘以缩放的倍数。如果缩放的倍数为负数,则向量的方向变为相反。两个方法代码如下所示。 //缩放,缩放当前向量 public function scale(s:Number):void { _x *= s; _y *= s; } //缩放,返回新向量 public function scaleNew(s:Number):V2D { return new V2D(_x* s,_y * s); }
  • 254. 12.3.8 向量长度向量的长度表示向量的大小,在数学种向量的大小被称为“模”。向量长度的计算就是利用勾股定理计算向量坐标与坐标原点之间的距离。下面定义获取向量长度的方法length(),方法代码如下所示。 //获取向量长度 public function length():Number { return Math.sqrt(_x * _x + _y * _y); }
  • 255. 12.3.9 向量角度向量的角度用于指明向量的方向。向量方向的计算是利用反正切函数进行计算,实际计算的是向量坐标点与原点之间连线与x轴之间的夹角。下面的方法getangle()定义获取角度的方法,代码如下所示。 //获取向量角度 public function getangle():Number { return MathD.atan2(_y,_x); }
  • 256. 12.3.10 向量旋转向量的旋转也是改变向量的角度,不过此方法是在原有角度的基础上进行角度增加或减少。下面的方法rotate()定义向量旋转的方法,方法代码如下所示。 向量控制圆形排布效果
  • 257. 12.3.11 向量点乘在物理学中,功的定义为:功等于力和在力的方向上所发生的位移的乘积。在这个定义中,涉及的就是两个向量的乘积,两个向量相乘,得到一个结果,此结果称为向量的点积。在使用用坐标表示的平面向量中,两个向量a(x1,y1)和b(x2,y2)点积的计算公式为: a·b=x1*x2+y1*y2 下面定义两个向量点积的方法,代码如下所示。 //点积 public function dot(v:V2D):Number { return _x * v._x + _y * v._y; }
  • 258. 12.3.12 法向量法向量是指和原向量垂直的向量,也就是原向量和新向量之间的夹角是90度。对一个向量来说,与其夹角为90度的向量都有两个,这两个向量在计算中对x属性取反或者对y属性取反,比如向量a(x,y)的法向量有两个:a(-x,y)和a(x,-y)。计算向量的法向量的方法如下,返回一个新的向量——法向量。 //法向量 public function getNormal():V2D { return new V2D(-_y,_x); }
  • 259. 12.3.13 向量夹角计算向量间的交角的过程相对比较复杂,需要利用向量相乘的逆运算来进行。两个向量相乘,可以利用下面的数学公式进行计算: 所以要计算两个向量之间的交角,需要对该公式进行变形,变形后的公式为:
  • 260. 12.3.14 圆边缘碰撞实例向量在物理学中有着非常重要的应用,利用向量,可以方便的处理物体的运动、碰撞、反射等等问题。 下面利用向量实现在圆形区域内运动的小球的动画效果。在此效果中,当小球与区域边缘发生碰撞时,实现反射效果,速度的方向和运动的方向都旋转一定的角度。其实现过程和原理为: (1)创建一个圆形区域。 (2)创建一个小球,实现小球的运动。小球的运动使用帧循环事件实现。 (3)检测小球是否与圆形区域边缘发生碰撞。此检测可以通过检测向量的长度来实现。 (4)碰撞后的速度方向的改变。此过程可以先获取速度向量和位移向量的夹角,然后通过向量旋转来实现。
  • 261. 第13章 几何结构在ActionScript 3.0中,除了使用点来处理几何结构外,还可以使用矩形类和转换矩阵类来处理几何结构。这些类常用于显示对象的处理、位图的处理、处理复杂的动画效果和三维立体效果。本章将详细介绍矩形类和转换矩阵类。
  • 262. 13.1 Rectangle类Rectangle类用于定义一个矩形区域。利用该类可以用于控制显示对象的拖动访问,用于定义BitmapData对象的作用区域等。
  • 263. 13.1.1 Rectangle类Rectangle类创建的矩形区域的大小和位置以及相关的属性如图所示。 要定义一个矩形区域,需指定区域左上角的坐标和矩形区域的宽度和高度。在ActionScript 3.0中,使用Rectangle类的构造函数,可以创建一个Rectangle对象。其用法格式如下所示。 var 对象名称:Rectangle=new Rectangle(左上角x坐标,左上角y坐标,宽度,高度)矩形范围图
  • 264. 13.1.2 矩形区域的大小和位置创建成功的矩形区域,在使用的过程通常会进行一些修改。要改变已有的矩形对象的大小和位置,有5中不同的方法可供选择,分别为:属性变动、offset()方法、offsetPoint()方法、inflate()方法和inflatePoint()方法。 1.属性变动:通过更改矩形对象的属性,可以来调整矩形对象的位置和大小。其用法格式如下所示。 矩形对象.属性=属性值 2.offset()方法:offset()方法是通过调整矩形对象左上角的x属性和y属性来调整矩形对象的位置。其用法格式如下所示。 offset(dx:Number,dy:Number) 3.offsetPoint()方法:offsetPoint()方法是通过调整矩形对象左上角的坐标来调整矩形对象的位置。其用法格式如下所示。 offset(p:Point) 4.inflate()方法:此方法保持中心点的位置不变,按指定量增加矩形对象的大小(以像素为单位)。其用法格式如下所示。 inflate(dx:Number,dy:Number) 5.inflatePoint()方法:此方法同样保持中心点的位置不变,按指定量增加矩形对象的大小(以像素为单位)。其用法格式如下所示。 inflatePoint(p:Point)
  • 265. 13.1.3 矩形区域间的联合矩形区域的联合,就是把两个不同的矩形区域聚合在一起,转换成一个新的矩形区域。转换的方法如图所示。 矩形区域的联合,联合后的矩形是从左侧矩形的左上角到右侧矩形的右下角所决定的一个新的矩形。 在应用中使用union()方法来实现两个矩形的联合。用法格式如下所示。 矩形对象1.union(矩形对象2)矩形区域联合图
  • 266. 13.1.4 矩形区域间的交集矩形区域的交集,就是把两个不同的矩形区域结合在一起,从中产生一个两个矩形交叉重叠的区域并返回新的矩形区域。转换的方法如图所示。 在应用中使用intersection ()方法来实现两个矩形的联合。用法格式如下所示。 矩形对象1. intersection (矩形对象2) 矩形区域交集图
  • 267. 13.1.5 控制拖动范围实例在ActionScript 3.0中,显示对象的拖动方法startDrag()有两个参数,其第二个参数:bounds,是一个矩形区域,用于控制显示对象的拖动范围在这个参数指定的矩形区域之内。 下面利用Rectangle对象创建一个矩形区域,使用显示对象的startDrag()方法,拖动并控制显示对象的拖动范围在矩形区域之内。
  • 268. 13.2 Matrix类在ActionScript 3.0中,Matrix类是一个转换矩阵,它将一个点坐标映射到另一个空间坐标。利用Matrix对象,可以实现对显示对象的操作控制。常见的操作如旋转显示对象、缩放显示对象、平移显示对象和倾斜显示对象。
  • 269. 13.2.1 Matrix类转换矩阵Matrix类对应的对象应具有如图所示的内容。 在ActionScript 3.0中,Matrix类只在二维空间中操作,因此属性值u和v始终为0,属性值w为1。所以该矩阵的有效值如图所示。转换矩阵内容矩阵有效值
  • 270. 13.2.2 创建Matrix对象创建Matrix对象,有两种方法可以选择:一是使用其构造函数,二是使用其creatBox()方法。本节介绍使用这两种创建Matrix对象的方法。 1.构造函数创建 2.creatBox()方法
  • 271. 13.2.3 矩阵平移显示对象使用矩阵对象的translate()方法可以实现平移显示对象。其用法格式如下所示。 translate(dx:Number,dy:Number) 参数说明如下: dx:一个以象素为单位的数值,指沿x轴向右移动的量。 dy:一个以象素为单位的数值,指沿y轴向下移动的量。平移影响矩阵图 平移对象显示结果图
  • 272. 13.2.4 矩阵缩放显示对象矩阵的scale()方法用来缩放显示对象。此方法缩放显示对象,以显示对象的左上角为基点进行缩放。其用法格式如下所示。 scale(sx:Number,sy:Number) 参数说明如下: sx:一个数值,用于沿x轴缩放对象的倍数。 sy:一个数值,用于沿y轴缩放对象的倍数。缩放影响矩阵图 缩放对象显示结果图 缩放显示对象效果图
  • 273. 13.2.5 矩阵旋转显示对象矩阵的rotate()方法用来旋转显示对象。此方法旋转显示对象,以显示对象的中心为基点进行旋转。其用法格式如下所示。 ritate(angle:Number) 此方法只有1个参数,angle为以弧度为单位的旋转角度。 此方法将影响矩阵中的a、b、c、d四个值,改变后的矩阵有效值如图所示。旋转影响矩阵图 旋转对象显示结果图 旋转显示对象效果图
  • 274. 第14章 绘图与颜色绘图和颜色是显示编程的基础。在显示编程中利用绘图方法绘制不同的元件进行组合,可以实现多种不同的显示效果;利用颜色转换方法,可以控制显示对象的多彩显示,增加观赏性。本章结着重介绍颜色的控制和使用绘图类绘制显示对象的方法。
  • 275. 14.1 颜色与颜色转换颜色是基础,颜色转换是具体的操作者。利用颜色转换操作颜色,实现多彩的Flash世界。本节将介绍颜色的三基色原理和颜色转换的ColorTransform类。
  • 276. 14.1.1 颜色基础光的色散是光学中最重要的现象,七彩的彩虹就是光的色散的杰作。光的色散的基本现象是:白光通过一个三棱镜后,变为多种颜色逐渐过渡的色谱,颜色依次为红、橙、黄、绿、青、蓝、紫,这就是可见光谱。人的眼睛对红、绿、蓝三种颜色特别敏感,所以人眼看到的光都可以看作是由这三种颜色的光复合而成的。大多数的颜色可以通过红、绿、蓝三色按照不同的比例组合而成复合光。反过来绝大多数单色光也可以分解成红绿蓝三种色光,这就是最基础的三基色原理。三种基色是相互独立的,任何一种基色都不能有其它两种颜色合成。红绿蓝是三基色,这三种颜色合成的颜色范围最为广泛。 最基本的颜色组合如下所示。 红色+绿色=黄色 绿色+蓝色=青色 红色+蓝色=品红 红色+绿色+蓝色=白色
  • 277. 14.1.2 转换显示对象颜色在ActionScript 3.0种,要转换显示对象的颜色,就必须用ColorTransform类。ColorTransform类用于调整显示对象的颜色值。调整的方法是把颜色调整或颜色转换应用于所有四种通道:红色、绿色、蓝色和Alpha透明度。所谓的颜色通道指就是构成整体图像的颜色信息整理并表现为单色图像的工具。在ActionScript 3.0的颜色体系中,颜色通道就是指红色、绿色和蓝色三种基本颜色。 把ColorTransform产生的新对象应用于显示对象时,将按照下面的公式对每个颜色通道重新计算出新值,公式分别如下所示。 新红色值=(旧红色值*红色乘数因子)+红色通道偏移量 新绿色值=(旧绿色值*绿色乘数因子)+绿色通道偏移量 新蓝色值=(旧蓝色值*蓝色乘数因子)+蓝色通道偏移量 新Alpha值=(旧Alpha值*Alpha透明度乘数因子)+Alpha通道偏移量
  • 278. 14.1.3 随机颜色随机颜色的效果在Flash显示编程中经常会用到。五彩频繁的烟花效果,七彩的雨后彩虹效果,漂亮的色彩渲染效果,这些效果的实现都离不开随机颜色的作用。本节提供几个实现随机颜色的方法,并利用这些方法实现简单的效果。 1.使用ColorTransform构造函数实现 2.使用随机函数生成一个十六进制的RGB颜色值跳到的霓虹效果图
  • 279. 14.2 绘制直线和曲线在ActionScript 3.0中,利用显示编程,可以绘制出Shape,Sprite,Button和MovieClip。这些类中都有一个Graphics属性,是flash.display.Graphics类的实例。Graphics类提供了一组绘制矢量图形的方法,使用这些方法可以很方便的绘制线条和形状。本节主要介绍利用Graphics类实现绘制直线和曲线的方法。
  • 280. 14.2.1 设置线条样式在进行绘制之前,必须要设置Graphics类的线条样式,如果不设置,则默认为undefined。这样绘制的图形将没有线条效果,而且不能进行渲染。线条的样式是通过lineStyle()方法定义的,其用法格式如下所示。 lineStyle(thickness,color,alpha,pixelHinting,scaleMode,caps,joints,miterLimit) 参数说明如下: thickness:数值,定义线条的宽度,范围为0到255,若超出范围会自动调整。默认值为1。 color:十六进制数值,定义线条的颜色。默认值为0X000000(黑色)。 pixelHinting:Boolean型数据,指示线条是否包住整个象素。默认值为false。
  • 281. 14.2.1 设置线条样式scaleMode:用于定义要使用哪种缩放模式的LineScaleMode类的值,提供的类型有四种:“NORMAL”在缩放对象时总是缩放线条的粗细(默认值);“NONE”从不缩放线条粗细;“VERTICAL”如果仅垂直缩放对象,则不缩放线条粗细;“HORIZONTAL”如果仅水平缩放对象,则不缩放线条粗细。 caps:定义线条末端处端点类型的CapsStyle的值。有效值有三种,分别为:CapsStyle.NONE、CapsStyle.ROUND和CapsStyle.SQUARE。如果未指示值,则默认为圆头端点。 joints:定义用于拐角的连接外观的类型。有效值有三种,分别为:JointStyle.BEVEL、JointStyle.MITER和JointStyle.ROUND。如果未指示值,则默认圆角连接。 miterLimit:一个表示将在哪个限制位置切断尖角的数字。范围为1到255,超出该范围的值将舍入为1或255。此值只可用于jointStyle设置为"miter"的情况下。miterLimit值表示向外延伸的尖角可以超出角边相交所形成的结合点的长度。默认值为3。
  • 282. 14.2.2 绘制一条直线直线的绘制时绘制图形的基础,复杂的几何图形都是利用简单直线组合而成的。在ActionScript 3.0中使用lineTo()方法来绘制直线,不过在绘制之前,还需要使用moveTo()方法定义绘制的起始点和线条的样式。这两个方法用法格式如下所示。 moveTo(x,y) lineTo(x,y) 参数说明如下: x:绘制起始点和结束点的x横坐标,起始点的默认值为0。 y:绘制起始点和结束点的y纵坐标,起始点的默认值为0。
  • 283. 14.2.3 绘制一条曲线在ActionScript 3.0中使用curveTo()方法来绘制曲线,绘制出的曲线是一个通过中间控制点来控制曲线效果的曲线。其用法格式如下所示。 curveTo(x0,y0,x1,y1) 参数说明如下: x0:一个数字,表示曲线控制点的x横坐标。 y0,一个数字,表示曲线控制点的y纵坐标。 x1:一个数字,表示曲线结束点的x横坐标。 y1:一个数字,表示曲线结束点的y纵坐标。
  • 284. 14.3 绘制几何图形在ActionScript 3.0中提供了几个绘制集合图形的方法,分别为:绘制矩形drawRect()方法,绘制圆角矩形drawRoundRect()方法,绘制圆形drawCircle()方法和绘制椭圆形的drawEllipse()方法。 在进行绘制之前,需要对要绘制的几何图形设置填充样式和边缘线条样式。填充样式需要使用beginFill()方法,该方法的用法格式如下所示。 beginFill(color:uint,alpha:Number) 参数说明如下: color:用十六进制表示的颜色值,格式为0XRRGGBB。必选参数。 alpha:填充的透明度alpha的数值,默认值为0。 用法示例代码如下所示。 beginFill(0xff0000,1)
  • 285. 14.3.1 绘制矩形在ActionScript 3.0中,要实现绘制一个矩形,可以使用graphics类的drawRect()方法来实现。其用法格式如下所示。 drawRect(x:Number,y:Number,width:Number,height:Number) 参数说明如下: x:要绘制的矩形的注册点相对于显示对象容器的横坐标值。 y:要绘制的矩形的注册点相对于显示对象容器的纵坐标值。 width:要绘制的矩形的宽度。 height:要绘制的矩形的高度。
  • 286. 14.3.2 绘制圆角矩形在ActionScript 3.0中,使用graphics类的drawRoundRect()方法来绘制圆角矩形,与绘制矩形的方法比较,该方法多了两个参数,用于定义圆角的宽度和高度。其用法格式如下所示。 drawRoundRect(x:Number,y:Number,width:Number,height:Number,ellipseWidth:Number,ellipseHeight:Number) 参数说明如下: x:要绘制的圆角矩形的注册点相对于显示对象容器的横坐标值。 y:要绘制的圆角矩形的注册点相对于显示对象容器的纵坐标值。 width:要绘制的圆角矩形的宽度。 height:要绘制的圆角矩形的高度。 ellipseWidth:绘制的圆角的宽度 ellipseHeight:绘制的圆角的高度
  • 287. 14.3.3 绘制圆形在ActionScript 3.0中,使用graphics类的drawCircle()方法来绘制圆形,其用法格式如下所示。 drawCircle(x:Number,y:Number,radius:Number) 参数说明如下: x:要绘制的圆形的注册点相对于显示对象容器的横坐标值。 y:要绘制的圆形的注册点相对于显示对象容器的纵坐标值。 radius:要绘制的圆形的半径。
  • 288. 14.3.4 绘制椭圆在ActionScript 3.0中,使用graphics类的drawEllipse()方法来实现绘制圆形。其用法格式如下所示。 drawEllipse(x:Number,y:Number,width:Number, height:Number) 参数说明如下: x:要绘制的圆形的注册点相对于显示对象容器的横坐标值。 y:要绘制的圆形的注册点相对于显示对象容器的纵坐标值。 width:要绘制的椭圆的宽度。 height:要绘制的椭圆的高度。
  • 289. 14.4 颜色的渐变和填充在ActionScript 3.0中,不仅支持使用纯色来填充线条和图形,也支持用渐变颜色来填充线条和图形。graphics类提供了lineGradientStyle()方法来设置线条样式为渐变填充;提供了beginGradientFill()方法来设置渐变颜色填充图形。
  • 290. 14.4.1 线条的渐变要使用渐变颜色来绘制一个线条,需要使用lineGradientStyle()方法而不是lineStyle()方法来设置线条样式。lineGradientStyle()方法用法格式如下所示。 lineGradientStyle(type:String,colors:Array,alphas:Array,ratios:Array,matrix:Matrix,Method:String,interpolationMethod:String,focalPointRatio:Number) 参数说明如下:type:指明要使用的渐变类型的GradientType类的值,有两种样式可供选择:GradientType.LINEAR指定方式为线性填充;GradientType.RADIAL指定方式为放射性填充。 colors:指明在渐变中使用的RGB十六进制颜色值数组。 alphas:和颜色数组对应,颜色数组中对应颜色的透明度alpha值数组;有效值为0到1。 ratios:指明颜色分布比率的数组;有效值为0到255。值0表示渐变框中的左侧位置,255表示渐变框中的右侧位置。该值表示渐变框中的位置,而不是最终渐变的坐标空间,坐标空间可能比渐变框宽或窄。注意:数值中的值必须持续增加。 matrix:指明flash.geom.Matrix类定义的转换矩阵来填充。通常和createGradientBox()方法结合使用。
  • 291. 14.4.2 渐变填充使用渐变来填充图形,能够使显示图形更加的丰富,饱满,效果更好。而要绘制渐变的图形,需要使用beginGradientFill()方法来实现。其用法格式如下所示。 beginGradientFill(type:String,colors:Array,alphas:Array,ratios:Array,matrix:Matrix,Method:String,interpolationMethod:String,focalPointRatio:Number)
  • 292. 14.5 常用绘制方法介绍在ActionScript 3.0中提供的绘图方法只有上面的一些,要实现其它的绘制效果,需要结合其它的类和方法来实现。本节通过不同的实现方法,介绍绘制一些常用的几何图形的绘制方法。
  • 293. 14.5.1 鼠标绘制直线ActionScript 3.0中的绘制直线方法只能绘制固定的、设计好的线条,而借助于鼠标事件,可以实现动态的绘制直线的效果:按下鼠标并移动,在松开鼠标时,绘制从按下鼠标位置到松开鼠标位置之间的直线。其实现原理如下: (1)按下鼠标,定义绘制起始点为鼠标当前坐标和定义绘制线条样式。。 (2)松开鼠标,进行绘制。
  • 294. 14.5.2 鼠标任意绘制线条鼠标绘制任意的线条,可以实现类似于画笔的效果,在按下鼠标后,鼠标在运动的过程中同时画出鼠标移动的线条。其实现原理为: (1)按下鼠标,确认将要绘制,定义绘制起始点为鼠标当前坐标和定义绘制线条样式。 (2)移动鼠标,进行绘制,从上帧鼠标位置绘制到当前鼠标位置。 (3)松开鼠标,结束绘制。
  • 295. 14.5.3 绘制虚线在绘图的过程中,有时需要使用虚线来进行绘制,而ActionScript 3.0并没有提供这样的方法。在这里介绍一种绘制虚线的方法,希望能够给读者一定的帮助。实现原理如下: (1)定义虚线的样式,包括虚线中一段实线的长度和一段虚线的长度。 (2)计算绘制起点和终点之间的长度和角度。 (3)利用两点之间的角度和每一段实现和虚线的长度,计算对应的水平和竖直长度。 (4)使用循环来不断绘制一段实线并跳过虚线的部分,实现绘制虚线。
  • 296. 14.5.4 绘制箭头线绘制箭头线的在使用个过程中也会经常用到,而绘制的方法也很多,在这里介绍一种利用前面学习过的向量类实现绘制箭头线的效果。实现原理为: (1)从坐标原点向向量绘制一条直线。 (2)把原向量顺时针和逆时针旋转1度,并把得到两个新的向量缩放为95%,得到最终的两个新向量。 (3)从原向量分别向两个新向量绘制直线,构成箭头。
  • 297. 14.5.5 绘制三角形绘制三角形的方法很简单,从确定的三点之间依次连线,构成闭合三角形,然后使用beginFill()方法进行填充就可以了。绘制三角形
  • 298. 14.5.6 绘制扇形扇形是指由顶点在圆心的角的两边和这两边所截一段圆弧围成的图形。要绘制扇形,需要绘制两边的直线和一段圆弧。这里使用向量结合循环来绘制指定向量和扇形角度的扇形,其实现原理为: (1)从原点向向量绘制一条直线。 (2)使用循环,把向量每次旋转一度并绘制一次。 (3)从结束向量绘制到原点。 (4)填充图形,绘制完成。绘制扇形
  • 299. 14.5.7 绘制正多边形各边相等,各角也相等的多边形叫做正多边形。多边形的形状如图14-19所示。 要绘制正多边形,实现的原理为: (1)按照正多边形的边数,对圆进行平分。 (2)从其中的一个平分点开始,逐个平分点进行绘制。 (3)连接第一个平分点,构成完整图形。正多边形
  • 300. 14.5.8 动态画圆动态画圆,需要使用帧循环事件,每帧依次改变圆上的点,使用lineTo()方法绘制一次。动态画圆效果图
  • 301. 第15章 文本文本是显示编程的基础,使用文本,才能够把信息通过舞台显示,才能实现信息的设置和获取。在ActionScript 3.0中,文本一般使用文本字段来显示,有时也会利用系统提供的UI组件显示。 本章将主要介绍如何定义文本字段及内容,如何设置和获取输入文本,如何获取远程文件的动态文本或者是在Adobe Flash CS3 Professional中定义的静态文本。在ActionScript 3.0中,可以指定文本字段的具体文本内容,可以使用样式和格式进行文本格式化操作,此外还可以相应用户的输入事件和超链接的鼠标响应事件。
  • 302. 15.1 文本处理基础在ActionScript 3.0中,TextField类是文本处理的基础,其它的类都与此类相关。通常使用TextFiled构造函数创建文本对象的实例,然后使用该类的属性和方法来控制显示内容,调节显示样式。 要显示的文本字段内容,可以是实现在编程中事先设置的;可以是从外部的文本文件或者数据库中加载的;可以使用输入文本进行交换输入;还可以呈现HTML格式文本,并在其中嵌入图像。 文本的样式可以使用flash.text包中的类来控制调节,也可以利用外部的css样式表来控制显示文本的显示格式。 在本章的文本处理中,主要介绍现下面这些功能的实现方法。 修改文本字段内容。 在文本字段中使用HTML。 在文本字段中使用图像。 选择文本并处理用户选择的文本。 捕获文本输入。 限制文本输入。 对文本应用格式设置和CSS样式。 使用清晰度、粗细和消除锯齿功能来微调文本显示。 在ActionScript 3.0中访问和处理静态文本字段。
  • 303. 15.2 显示文本显示文本,主要是针对Flash中文本的三种不同类型的文本进行显示。Flash中三种文本类型分别为:静态文本、动态文本和输入文本。
  • 304. 15.2.1 文本类型在ActionScript 3.0中,支持的文本类型有三种, 静态文本是一些不会改变的文字。此种文本类型只能通过Flash创作工具来创建,而不能使用 ActionScript 3.0创建静态文本实例。此类型文本广泛用于Flash创作,用于在Flash种显示不变的文本。这些文字在发布为SWF格式文件后,显示出来的文字不再改变,不能够再更改。要更改,必须通过修改源文件来实现。在ActionScript 3.0中,虽然无法创建静态文本,但是可以利用ActionScript3.0的StaticText类和 TextSnapshot类来访问和操作静态文本实例。 动态文本是文本内容可以利用ActionScript3.0脚本动态改变的文本类型。此种文本类型使用TextFiled类来管理,需要创建该类的实例。动态文本的内容可以使用脚本语言利用TextFled类的text属性来实现设定;也可以外部源(例如文本文件、XML 文件以及远程Web服务)加载的内容;还可以接受HTML格式的文本。动态文本可以通过TextField类的实例来访问。 输入文本和动态文本类型相似,都是可以动态的改变文字内容,唯一的区别是输入文本类型可以让使用者输入内容。输入文本可以利用样式表来设置输入文本的格式,也使用TextFormat类为输入内容指定文本字段的属性。输入文本也可以通过TextField类的实例来访问。
  • 305. 15.2.2 显示动态文本在ActionScript3.0中,要使用显示文本,需要导入flash.text包中的内容。该包包括用于处理文本字段、文本格式、文本度量、样式表和布局的类。基本的文本处理只需导入flash.text.TextField类包即可。TextField类用于创建显示对象以显示和输入文本。SWF文件中的所有动态文本字段和输入文本字段都是TextField类的实例。 创建TextField类的示例,要使用new关键字来实现。其用法格式如下所示。 var 文本对象名称:TextField=new TextField() 这样,文本对象的实例就被创建成功。 使用ActionScript 3.0脚本语言创建的TextField类的实例,默认的文本类型是动态文本。创建好TextFiled类的实例,需要使用TextField类的text属性来设置要显示在文本内的内容。其用法格式如下所示。 文本对象名称.text=文本内容:String
  • 306. 15.2.3 显示输入文本输入文本的实现同样需要先创建TextField类的实例,但是由于其默认的是动态文本类型,所以需要使用TextFiled类的type属性把动态文本类型改变为输入文本类型。改变后的输入文本的默认值为空,当然也可以使用TextField类的text属性来默认输入文本的初始值。其基本的用法格式如下所示。 var 文本对象名称:TextField=new TextField() 文本对象名称.type=TextFieldType.input 文本对象名称.text=文本内容:String
  • 307. 15.2.4 显示HTML文本在ActionScript 3.0中,动态文本TextFeld类的示例,不仅可以接受纯文本格式的文本字段,也可以接受HTML格式的文本。显示HTML文本,要使用TextField类的htmlText属性来实现。在ActionScript 3.0中接受HTML文本,借助HTML强大的文本显示性能,大大扩展了Flash的动态文本显示功能。其用法格式如下所示。 var 文本对象名称:TextField=new TextField() 文本对象名称.htmlText=html格式文本:String
  • 308. 15.2.5 获取静态文本内容在ActionScript 3.0中,有一个flash.text.StaticText类,用于专门管理静态文本。要获取静态文本,需要遍历舞台上的显示对象,若显示对象类型为静态文本,就可以使用StaticText方法把静态文本转换为静态文本变量,进而可以在编程的过程中使用。 下面的示例先在Adobe Flash CS3 Professional中创建一个静态文本,然后使用文档类来获取静态文本的内容。具体操作步骤如下所示。 (1)选择【工具】|【文本工具】,在舞台上创建一个静态文本。 (2)输入文本的内容:“这是一个静态文本。” (3)在【属性】面板【文本类型】中,选择【静态文本】。 (4)创建文档类:DstaticSample,
  • 309. 15.3 文本操作文本操作,主要涉及下面的一些内容:文本的基本样式设计,文本的是否可选,获取选择的文本,过滤输入文本以及监听文本输入等等。
  • 310. 15.3.1 文本对象基本设置使用TextField类创建的文本对象,可以利用TextField类的属性对基本样式进行设置。常用的样式如表所示。文本基本格式属性属性参数类型说明autoSizeString控制文本字段的自动大小调整和对齐。backgroundBoolean指定文本字段是否具有背景填充。backgroundColoruint文本字段背景的颜色。borderBoolean指定文本字段是否具有边框。borderColoruint文本字段边框的颜色。textColoruint文本字段中文本的颜色(采用十六进制格式)。textHeightNumber只读属性,文本的高度,以像素为单位。textWidthNumber只读属性,文本的宽度,以像素为单位。
  • 311. 15.3.2 设置文本的可选择性设置文本的可选性,就是设置动态文本是否可选。使用TextField类创建的文本对象,默认是可选的。但是这样在使用的过程中会造成一些不必要的麻烦,因而如果仅仅是使用动态文本显示数据,那么最好设置其为不可选。要设置文本的可选性,需要使用TextField类的selectable属性来控制。此外,还可以使用TextField类的setSelection()方法,来选取文本对象中的某一部分内容。此属性和方法的用法格式如下所示。 文本对象.selectable=Boolean值 文本对象.setSelection(开始索引,结束索引)
  • 312. 15.3.3 捕获选择的文本要捕获选择的文本,可以使用TextField类的selectionBeginIndex属性和selectionEndIndex属性来获取选择的文本的开始索引和结束索引,进而可以获得所选文本的内容。selectionBeginIndex属性表示被选择文本的第一个字符的位置索引,selectionEndIndex属性表示被选择的文本的最后一个字符的位置索引。利用首尾两个位置索引,借助String类的相关方法,可以获取被选择的文本的内容。 下面的示例先使用文本对象的setSelection方法选取一段文本,然后使用文本对象的selectionBeginIndex属性和selectionEndIndex属性,获取选择文本的索引。
  • 313. 15.3.4 过滤输入文本过滤输入文本,也就是限制输入文本的内容,指定输入文本框中,有些字符可以输入,有些字符不能输入。要实现过滤输入文本,需要使用TextField类的restrict属性来控制。 restrict属性的默认值为null,表示可以输入任何字符。如果restrict属性的值为空字符串,则表示不能输入任何字符。如果restrict属性的值为一字符串,则只能在文本字段中输入该字符串中的字符。限制的规律时从左向右扫描该字符串,若在此字符串中存在,可以输入,否则不能输入。如果有连续的字符串,则可以使用连字符(-)指定一个范围。 下面的示例使用文本对象的restrict属性,限制字符的输入范围为只能输入大写字符、空格和数字: 文本对象.restrict="A-Z 0-9";
  • 314. 15.3.5 使用密码输入使用密码输入,实际就是设置输入文本框内的输入文本不直接显示,而是使用*来替代输入文本。要实现密码输入,需要使用TextField类的displayAsPassword属性来实现。若设置此属性的值为true,则文本字段被视为密码文本字段,并使用星号而不是实际字符来隐藏输入的字符。若设置为false,则不会将文本字段视为密码文本字段,而是作为普通的输入文本来处理。密码输入
  • 315. 15.3.6 监听文本输入要监听文本输入,只需侦听TextEvent类的TEXT_INPUT事件即可。 下面的示例实现在输入文本框中输入文本,然后通过侦听TextEvent事件类的TEXT_INPUT事件,获取输入文本的内容,然后在动态文本框中同步显示输入文本的内容。监听输入文本
  • 316. 15.4 对文本进行格式化文本格式化,也就是通过编程设计,设置文本对象的显示格式。要实现文本格式化,在ActionScript3.0中有三种方式可供选择,分别为:使用HTML标签、使用TextField.setTextFormat()方法和使用CSS设置文本框的StyleSheet样式。
  • 317. 15.4.1 setTextFormat方法介绍TextField类的setTextFormat()方法用于使用TextFormat样式来格式化文本(具体的样式属性,请参见15.4.2节的内容)。其用法格式如下所示。 setTextFormat(format,beginIndex,endIndex) 参数说明如下: format:TextFormat对象,一个包含字符和段落格式设置信息的TextFormat对象。 beginIndex:数字,指定所需文本范围内第一个字符的从零开始的索引位置。默认值为-1。 endIndex:数字,指定所需文本范围内最后一个字符的从零开始的索引位置。默认值为-1。
  • 318. 15.4.2 TextFormat格式化属性介绍TextFormat格式化方法使用TextFormat类来实现。使用TextFormat类可以为文本字段创建特定的文本格式。此类设置的文本格式不仅可以作用于动态文本字段,也可以作用于静态文本字段。TextFormat类的属性可以设置使用设备字体和嵌入字体。但是,嵌入字体、粗体或斜体文本需要特定字体才能实现。也就是说,如果要使用嵌入字体来显示粗体或斜体文本,则需要嵌入该字体的粗体和斜体变体。 要创建TextFormat文本格式,先需要使用new TextFormat()方法创建TextFormat对象,才能设置该构造函数的属性。
  • 319. 15.4.3 格式化输入文本格式化输入文本,就是设置输入文本的默认格式,在文本输入的时候,同时使用默认的格式。要实现此方法,只需把TextFormat对象应用于文本对象的defaultTextFormat属性上。 下面的示例先创建一个输入文本,然后把TextFormat对象作用于输入文本,实现格式化输入文本的效果。使用文档类:DefaultTextFormat,格式化输入文本
  • 320. 15.4.4 格式化部分文本格式化部分文本,也就是对文本的一部分进行格式化。应用格式的文本数量,取决于setTextFormat()方法的两个参数beginIndex起始索引和endIndex结束索引。 下面的示例实现对文本对象的1~6个字符实现格式化操作,实现一段文本的不同部分使用不同格式的效果。使用文档类:TextFormatBE,部分格式化文本
  • 321. 15.4.5 设置文本的超链接在ActionScript 3.0中提供了给动态文本添加超链接的功能,要实现此功能,只需使用TextFormat对象的url属性即可。其用法格式如下所示。 var TF:TextFormat=new TextFormat() TF.url=URL 文本对象.setTextFormat(TF) 此外,还可以利用TextFormat对象的target属性定义打开的链接窗口的目标窗口。其用法格式如下所示。 TF.target=_target超链接文本
  • 322. 15.4.6 使用CSS格式化文本在ActionScript 3.0中,文本对象不仅可以接受纯文本对象,也可以接受HTML文本对象。HTML文本对象的格式CSS样式表来定义,CSS样式表定义可应用于多种不同文本字段的文本样式。CSS样式声明可以在应用程序代码中进行创建,也可以在运行时从外部CSS文件中加载。本节主要介绍在ActionScript 3.0脚本中创建并应用CSS文件。 在ActionScript 3.0中,flash.text.StyleSheet类用于处理CSS样式。StyleSheet类可识别有限的CSS属性集合。使用StyleSheet类可以创建包含字体大小、颜色和其它格式样式的StyleSheet对象。然后,可以将样式表定义的样式应用到包含HTML格式文本的TextField对象。利用StyleSheet对象定义的标签样式自动设置TextField对象中文本的格式。
  • 323. 15.5 多行文本显示通常情况下,需要显示的文本是很多的,这样一行就不能全部显示所要显示的内容,这就用到了多行文本。多行文本常用于显示大量的文本,那么对于多行文本,就需要对其进行基本的格式设置。此外利用多行文本来显示HTML文本,可以实现将外部图形或SWF文件加载在文本框中。 利用文本的滚动功能,可以实现在有限区域内通过滚动显示大量的文本。
  • 324. 15.5.1 多行显示文本要使用多行文本,需要设置TextField类的multiline属性和wordWrap属性的值。其用法格式如下所示。 文本对象. multiline=Boolean值 文本对象. wordWrap=Boolean值 multiline属性设置文本对象是否支持多行显示文本,默认为false,要使用多行文本,需要将该属性的值设置为true。wordWrap属性设置文本对象是否支持自动换行,默认为false,要使用自动换行,需要该属性的值设置为true。
  • 325. 15.5.2 设置段落格式多行文本的段落格式,同样需要使用TextFormat对象进行格式化,具体的用法格式化单行文本的方法相同。在TextFormat对象对象的属性中,用于设置文本段落格式的属性有以下几种: indent:指明首行缩进的值。 kerning:指明是否支持字符间距设置。 leading:设置行间距。 leftMargin:设置段落的左边距。 letterSpacing:设置字符间距。 rightMargin:段落的右边距。
  • 326. 15.5.3 在文本中显示图形利用ActionScript 3.0中支持HTML文本,可以在HTML文本加入图像img标签,实现在文本中显示图形的效果。使用标签可将JPEG、GIF、PNG类型的外部图像文件以及SWF文件和影片剪辑嵌入到文本中。在显示文本对象中,文本在嵌入的图像旁自动换行。若要使用该标签,必须将显示文本设置为多行和文本换行。 多行文本显示图形
  • 327. 第16章 字符串字符串是大量字符的组合。在ActionScript 3.0中使用顶级类String来管理和操作字符串。String类提供了处理原始字符串数据的方法和属性。此外还可以使用String()函数将任意对象的值转换为String数据类型的对象。 在ActionScript 3.0编程中,字符串的地位十分重要。本章介绍的处理方法对应用TextField、StaticText、XML、ContextMenu和FileReference对象都有很大的作用。
  • 328. 16.1 字符串基础知识在ActionScript 3.0中,字符是文本数据的最小单位,其内容为单个字母或符号。字符串是字符组成的一个序列,其内容是一个文本值,即串在一起而组成单个值的一系列字母、数字或其它字符。 在ActionScript 3.0中,可使用双引号或单引号将文本括起来以表示字符串值。下面的是几个字符串的示例: "Hello" "555-7649" "http://www.adobe.com/"
  • 329. 16.2 创建字符串在ActionScript 3.0中,String类用于表示字符串(文本)数据。ActionScript字符串既支持ASCII字符也支持Unicode字符。 ASCII字符是一种在计算机程序中表示文本字符和符号的系统。ASCII字符系统支持26个字母英文字母表,以及有限的一组其它字符。 Unicode字符也是一种在计算机程序中表示文本字符和符号的系统,不过它是一个标准系统。Unicode系统允许使用任何编写系统中的任何字符。 在ActionScript 3.0中,普通的字符串容易创建,而一些特殊的字符需要通过转义字符来实现,本节将分别介绍创建字符串的方法。
  • 330. 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";
  • 331. 16.2.2 定义含有转义字符的字符串在ActionScript 3.0中,使用双引号和单引号将字符“引”起来,表示这是一个字符串。字符串从一个引号开始,到下一个引号结束,也就是引号需要成对出现。但是若在字符串中间出现引号,就会认为字符串已经结束,后面的部分不再是字符串的一部分,或者组成了新的字符串。这样就和要实现的目的出现了偏差,会造成编译器在编译时就不能通过。 下面的示例创建的字符串就是错误的,代码如下所示。 var str:String=”这是一个错误的字符串,”不能正确使用”,编译器会报错”
  • 332. 16.3 处理字符串处理字符串,主要针对字符串的应用进行相关的处理。本节主要涉及的处理包括字符串的连接、在字符串中搜索、截取字符串、字符串的大小写转换等。
  • 333. 16.3.1 字符串连接在ActionScript 3.0中,有三种方式可以实现字符串的连接:使用+连接操作符、使用+=自赋值连接操作符和String.concat()方法。 1.+连接符连接字符串 使用+连接符可以连接字符串 2.+=自赋值连接符追加字符串 使用+=自赋值连接符可以实现在字符串的尾部追加字符串。 3.String.concat()方法 使用String.concat()方法也可以把指定的字符串追加到原字符串的后面,并返回一个新的字符串,原字符串的值并不发生改变
  • 334. 16.3.2 搜索字符串在ActionScript 3.0中,实现字符串搜索的方法有两种,分别为:String.indexOf()方法和String.lastIndexOf()方法。 1.indexOf()方法 indexOf()方法实现从字符串的起始位置开始,正向搜索字符串,返回搜索到字符串的位置索引。其用法格式如下所示。 indexOf(str,startIndex) 2.lastIndexOf()方法 lastIndexOf()方法实现从字符串的尾部位置开始,逆向搜索字符串,返回搜索到字符串的位置索引。其用法格式如下所示。 lastIndexOf(str,startIndex)
  • 335. 16.3.3 删除或者替换字符串在ActionScript 3.0中提供了对字符串进行查找并替换的方法replace()。replace()方法能够实现用一个新的字符串替换原有字符串中指定的字符串,若查找的字符串不存在,则不替换。其用法格式如下所示。 replace(str1,str2) 说明:此方法将返回一个新的字符串,原始字符串仍保持不变,没有修改。 参数说明如下: str1:要查找的字符串。 str2:用于替换的字符串。
  • 336. 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)
  • 337. 16.3.5 字符串转数组使用split()方法实现将字符串分隔成为数组,但要求字符串中必须有统一的分隔符。比如:逗号,~号,§号等等。 其用法格式如下所示。 split(str,limit) 此方法将返回一个新的数组。 参数说明如下: str:用来作为分隔符的字符串,可以是标点符号,也可以是空格,也可以是其它的字符。如果没有设置分隔符,则把整个字符串作为数组的一个元素。 limit:要放入数组中的最大项数。默认为允许的最大值。
  • 338. 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
  • 339. 第17章 正则表达式在ActionScript 3.0中引入了强大的字符串处理工具――正则表达式。正则表达式主要用于验证文本字段的值是否符合特定模式,比如验证用户输入的电话号码位数是否正确;或者替换与特定模式匹配的部分文本值。 本章将介绍正则表达式是什么,怎么使用,并介绍一些常见的正则表达式的写法。
  • 340. 17.1 正则表达式概述正则表达式常常被错误的认为是只有少数人理解的一种神秘语言。的确,表面上正则表达式看起来杂乱无章,如果不了解相关的语法知识,那么代码在就像一堆杂乱无章的字符堆积而已。事实上,正则表达式是非常简单并且可以被理解的。通过本节的学习,你将了解正则表达式的基本概念和基本构成,对正则表达式有一个基本的认识。
  • 341. 17.1.1 什么是正则表达式正则表达式最早是由数学家Stephen Kleene在对自然语言的递增研究成果的基础上,于1956提出来的。具有完整语法的正则表达式,主要使用在字符串的格式的匹配方面上,后来也逐渐应用到信息技术领域。不同的编程语言对于正则表达式有细微的不同,ActionScript 3.0是按照ECMAScript第3版语言规范(ECMA-262)中的定义实现正则表达式。 熟悉windows操作系统读者,应该知道windows中是怎样查找文件的。不错,使用通配符“*”用来匹配任意字符,“?”用来匹配一个字符,来实现搜索功能的。比如使用text?.txt来搜索的话,可以找到:
  • 342. 17.1.2 一个简单的正则表达式实例看一段正则表达式的代码可能觉得很复杂,实际上如果明白其规律,则就很容易理解了。 下面先来看一段简单的字符串查找替换的正则表达式示例,实现从一段文字中查找文字“正则表达式”,并把它替换成“regEXP”,代码如下所示: var str:String= "字符串查找替换的正则表达式示例,实现从一段文字中查找文字正则表达式,并把它替换成regEXP"; var pattern:RegExp = /正则表达式/; var repstr="regEXP" trace(str.replace(pattern,repstr));// 输出:字符串查找替换的regEXP示例,实现从一段文字中查找文字正则表达式,并把它替换成regEXP
  • 343. 17.1.3 正则表达式的构成正则表达式一般由两个部分组成。一部分是在双斜杠内部的字符串,称为匹配模式,用来表示要匹配的字符串的特征;另一部分是在第二个斜杠的后面,是一个字母,叫做正则表达式的标志位,由五个字母组合而成,具体请参见17.2.5节。 匹配模式由两部分组成,分别为:普通字符(例如字符a到z)和特殊字符(称为元字符)。正则表达式描述在查找字符串时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 正则表达式的定义方法有两种,一种是上例中的方法,使用双斜杠来定义,语法格式如下所示: var 正则表达式:RegExp=/匹配模式/标志位
  • 344. 17.2 正则表达式的语法ActionScript 3.0中的正则表达式是按照ECMAScript第3版语言规范(ECMA-262)中语言规范的定义的。在实际应用过程中,正则表达式都比较复杂。不过复杂的正则表达式都是按照一定的语法规则组合而成。本节将介绍正则表达式的语法知识。
  • 345. 17.2.1 正则表达式中的普通字符正则表达式中的普通字符,包括大小写英文字母,从0到9的数字和除了元字符的其它字符,比如#、!等。注意,中文也属于普通字符,不过它在正则表达式中使用Unicode码表示。由普通字符组成的正则表达式是简单的正则表达式。 下面是几个使用普通字符的正则表达式,代码如下所示: //使用英文字母作为正则表达式匹配模式 var pattern1:RegExp = /hello/; //使用中文字符作为正则表达式匹配模式 var pattern2:RegExp = /正则/; //使用中英文混合字符作为正则表达式匹配模式 var pattern3:RegExp = /正则hello/; //使用符号和英文字母作为正则表达式匹配模式 var pattern4:RegExp = /#hello~/;
  • 346. 17.2.2 正则表达式中的元字符正则表达式中定义了一些具有特殊含义的字符,这些字符在正则表达式中有特殊的含义,称为元字符。ActionScript 3.0中的元字符如表17-1所示: 1.匹配字符串头部字符 2.匹配字符串尾部字符 3.反斜杠转义字符 4.匹配单个字符 5.数量表示符 6.逻辑“或”操作符
  • 347. 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定义)的字符。
  • 348. 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个匹配
  • 349. 17.2.5 正则表达式中的标志位标志指指定有关应如何使用正则表达式模式的一些选项,如是否区分大写和小写字符等。这些标志对应与正则表达式类的属性。在ActionScript3.0中有5个标志位,如表所示:正则表达式的标志位标志属性说 明gglobal匹配多个匹配。iignoreCase不区分大小写的匹配。应用于 A-Z 和 a-z 字符,但不能应用于扩展字符,如 É 和 é。mmultiline设置此标志后,$ 和 ^ 可以分别匹配行的开头和结尾。 sdotall设置此标志后,.(点)可以匹配换行符 (\n)。xextended允许扩展的正则表达式。
  • 350. 17.3 正则表达式的用法在ActionScript3.0中,要搜索和检测正则表达式,既可以利用RegExp类的方法来实现,也可以利用String类的方法类来实现。本节将介绍利用这两个类的方法来操作正则表达式的示例。
  • 351. 17.3.1 RegExp类RegExp类是ActionScript 3.0中的顶级类,它允许使用正则表达式在字符串中执行搜索和替换文本的模式。其有7个属性,如表所示:正则表达式类属性属性返回类型说明dotallBoolean指定正则表达式模式中的点字符(.)是否与换行符相匹配。extendedBoolean指定是否为正则表达式使用扩展模式。globalBoolean指定是否为正则表达式使用全局匹配。ignoreCaseBoolean指定正则表达式是否忽略大小写。lastIndexNumber指定字符串中开始进行下一次搜索的索引位置。multilineBoolean指定是否设置了 m(多行)标志。sourceString指定正则表达式的模式部分。
  • 352. 17.3.2 String类的方法应用String类与正则表达式的结合,能够实现更为丰富的匹配和搜索效果。在ActionScript 3.0中,String类的search()方法、match()方法和replace()方法常用于正则表达式操作。本节将介绍这三种方法与正则表达式的综合应用。 search()方法主要用于查找作业,返回搜到的字符串的位置索引;match()方法实现的是匹配作业,返回的是匹配的字符串;replace()方法实现替换作业,返回的是替换的结果。
  • 353. 17.4 几种常用的正则表达式在实际应用中,很多地方都要用到正则表达式来进行匹配验证操作。特别是在进行表单验证的时候,需要验证的格式很多,比如验证用户名是否符合规范,姓名是不是中文,email格式是否正确,是否是正确的身份证号码等等。本节将介绍这些常用的正则表达式,并进行简单的验证匹配操作。
  • 354. 17.4.1 正则表达式测试场景在介绍正则表达式之前,先创建一个表单验证场景。首先创建一个初始化场景的显示对象类,继承自Sprite显示对象。此类将实现在舞台上形成完整的登陆场景。Initcheck类代码如下所示:验证界面
  • 355. 17.4.2 匹配中文字符在验证表单的过程中,很多时候对输入的文本要求都是输入中文。比如验证输入姓名,中国的地名等等。实现中文字符的验证需要用到元序列“\unnnn”,其中“\u”表示要匹配字符Unicode代码,后面的四位指16进制的Uincode字符。中文字符对应的Unicode字符范围位4e00到9fa5。所以要验证中文字字符,需要匹配的正则表达式位[\u4e00-\u9fa5]。验证中文字符
  • 356. 17.4.3 匹配用户名在输入表单中,用户名一般要遵循下面的规则:以字母开头,长一般为5到16个字符,其中包含大小写字母、数字和下划线组成。要实现这个规则,正则表达式表示如下所示:验证用户名
  • 357. 17.4.4 匹配货币数字通常情况下,货币的数字,也就是金额为一数值类型,其包括小数。如10.25元。其正则表达式表示如下所示: /^\d+(\.\d+)?$/ 说明:^\d+表示第一个字符为十进制数字,可以重复多次;(\.\d+)?表示中间可以匹配小说点,小数点后可以有数字,此比分可以重复0次或多次。匹配货币数字
  • 358. 17.4.5 匹配email地址在数据录入的过程中,通常要要对email地址进行判断。email地址的格式分为两部分:一部分为“@”字符之前的部分,是email地址的帐号,由一些字符组成;“@”后面的一部分为邮件服务器的域名,要包含一个“.”点号。其正则表达式表示如下所示: /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([.-]\w+)*/ 说明:\w+([-+.]\w+)*用于验证@前面的部分,信箱的帐号,由单词字符和“-”“+”“.”组成。\w+([-.]\w+)*\.\w+([.-]\w+)*用于验证@后面的部分,邮件服务器的域名,中间由一个“.”号,在使用中要用转义符进行转义。
  • 359. 17.4.6 匹配网址在表单录入的过程中,通常要要对网站URL地址进行判断。通用的网址格式如:http://www.flasc.cn。当然,有些时候可能简写为www.flasc.cn。本书提供的检测方法用来检测通用的网址, 其正则表达式如下所示: /(http:\/\/)?[^\s]/; 说明:/(http:\/\/)?用于验证是否存在“http://”,此验证重复零次或一次;[^\s]用来匹配除空白字符串以外的任何字符。
  • 360. 17.4.7 匹配ip地址ip地址很简单,用三个点分开四个数字,如:193.168.0.189。简单检测ip地址的正则表达式如下所示: /\d+\.\d+\.\d+\.\d+/; 说明:\d+表示十进制的数字,可以重复;\.用于转义“.”点号。匹配ip地址
  • 361. 17.4.8 匹配电话号码在表单输入的时候,有时需要输入电话号码。国内的电话号码有两部分,区号和主机号码,区号和主机号码之间使用“-”连接。其中区号时3位或4位数字,主机号是4位到8位的数字。国内电话号码的正则表达式如下所示: /\d{3}-\d{8}|\d{4}-\d{7}/;匹配电话号码
  • 362. 17.4.9 匹配身份证号码在表单验证过程中,身份证也是常有的一项输入内容。身份证号码也需要验证,要验证身份证号码,需要知道身份证号码的编码规则。下面的给出最新的18位居民身份证的编码规则: aa bb cc yyyymmdd nnn r 规则说明如下: aa:表示省份编码。 bb:表示省内地区编码。 cc:表示地级县市编码。 yyyymmdd:表示出生年月日。 nnn:表示同一地区出生年月日相同的人的序号。 r:表示校验码,数组0到10,由于10有两位,所以用X代替。
  • 363. 第18章 位图和滤镜在ActionScript 3.0中加入了对位图的支持,可以实现创建位图图像,也可以把外部的位图图像加载到Flash中利用滤镜类,可以对Flash元件和位图增加各种滤镜效果。结合位图和滤镜类,可以实现访问和更改各个像素值的功能,也可以创建自己的滤镜式图像效果并使用内置杂点功能创建纹理和随机杂点。
  • 364. 18.1 位图计算机系统中支持的图像主要分为两类:矢量图形和位图图像。本节将介绍位图的基础知识,以及在ActionScript 3.0中所提供的位图处理包的相关内容。
  • 365. 18.1.1 位图基础矢量图形由以数学方式生成的几何形状,如直线、曲线和多边形等基本图形组成,在Adobe Flash CS3中创作的图像属于矢量图形。位图图像也称为光栅图像,由排列为矩形网格形式的小方块,也就是像素组成,在Adobe PhotoShop CS3中创作的图像属于位图图像。 位图图像是用图像的宽度和高度来定义,以像素为量度单位。其中像素是指位图图像中的最小信息单位,表示在屏幕中显示的单个不同颜色的点。每个像素由对应的颜色值来表示。在使用RGB颜色表示的位图图像中,像素由红、绿和蓝三个字节组成,每个字节包含一个0到255之间的数字。将三个字节合并成为一个颜色值,应用于显示对象,就能够产生与绘画颜色相似的颜色。
  • 366. 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%的缩放系数绘制的,则图像将与最近的像素贴紧。
  • 367. 18.1.3 BitmapData类BitmapData类用于处理Bitmap对象的像素数据,也可以使用BitmapData类的方法创建任意大小的透明或不透明位图图像,并在运行时采用多种方式操作这些图像。此类还可以访问使用显示对象的Loader类加载的位图图像的BitmapData值。 BitmapData类的表18-1 BitmapData类属性 属性数据类型说 明heightint位图图像的高度,以像素为单位。只读属性。rectRectangle定义位图图像大小和位置的矩形。只读属性。transparentBoolean定义位图图像是否支持每个像素具有不同的透明度。只读属性。widthint位图图像的宽度,以像素为单位。z属性有4个,如表所示:BitmapData类属性属性数据类型说 明heightint位图图像的高度,以像素为单位。只读属性。rectRectangle定义位图图像大小和位置的矩形。只读属性。transparentBoolean定义位图图像是否支持每个像素具有不同的透明度。只读属性。widthint位图图像的宽度,以像素为单位。
  • 368. 18.1.4 创建位图创建位图,需要把Bitmap类和BitmapData类结合使用。使用Bitmap类创建位图对象,使用BitmapData类创建Bitmap对象的数据信息,最后使用Bitmap对象的构造函数或bitmapdata属性获得BitmapData创建的数据。 Bitmap类的构造函数格式如下所示: Bitmap(bitmapData,pixelSnapping,smoothing) 参数说明如下: bitmapData:被引用的BitmapData对象数据。默认值为null。 pixelSnapping:确定Bitmap对象是否贴紧至最近的像素。默认值为“auto”。 smoothing:确认在缩放时是否对位图进行平滑处理。默认值为false。
  • 369. 18.1.5 加载外部图像在ActionScript 3.0中支持加载外部的位图图像到位图中。加载外部的图像,需要使用显示对象的Loader类的load方法来实现。具体实现请参见22.1节。 下面的示例使用Loader对象,从外部加载一幅位图图像,并把它加入到Bitmap位图对象上。使用文档类:LoadImage,代码如下所示:加载外部图像
  • 370. 18.2 处理像素在ActionScript 3.0中,利用BitmapData类的方法,既可以处理单个像素点,又可以处理像素数组。本节将介绍处理单个和多个像素的方法。
  • 371. 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坐标位置。
  • 372. 18.2.2 设置单个像素若要想更改位图中包含的某个像素的颜色或透明度,则可以使用setPixel()方法或setPixel32()方法。若要设置像素的颜色,则这两种方法都可以使用。 setPixel()方法用于设置BitmapData对象的单个像素值。此方法会保留图像像素的当前Alpha通道值。其用法格式如下所示: setPixel(x:int, y:int, color:uint) 参数说明如下: x:指定要更改的像素点的x坐标位置。 y:指定要更改的像素点的y坐标位置。 color:指定像素点要改变成的RGB颜色值。
  • 373. 18.2.3 处理像素数组若要获取一个区域的像素而不是单个像素的值,可以使用getPixels()方法来实现。其用法格式如下所示: getPixels(rect:Rectangle) 参数rect表示当前BitmapData对象中的一个矩形区域,返回的结果是表示给定矩形对象中的像素的字节数组。字节数组的每个元素,即像素值都是无符号的整数(32位未经相乘的像素值)。 相反,若要更改一组像素值,可以使用setPixels()方法来实现。其用法格式如下所示: setPixels(rect:Rectangle, inputByteArray:ByteArray) 此方法实现将字节数组转换为像素数据的矩形区域。字节数组中的数据应该是32位ARGB像素值。 参数说明如下: rect:指定应用像素设置的BitmapData对象的矩形区域。 inputByteArray:字节数组对象,由要在矩形区域中使用的32位未经过相乘的像素值组成。
  • 374. 18.3 位图的复制位图复制就是将一个位图的数据复制到另一个位图图像。在ActionScript 3.0中,BitmapData类提供了4种位图复制的方法,分别为:clone()方法、copyPixels()方法、copyChannel()方法和draw()方法。
  • 375. 18.3.1 clone()方法clone()方法用于实现对原位图对象的克隆效果,此方法将产生一个与原位图完全相同的副本。其用法格式如下所示: clone() 注意:复制产生的副本的修改并不影响原位图的效果。 下面的示例使用clone()方法实现载入一个外部的位图,并进行复制操作。使用文档类:Clone,代码如下所示:克隆位图
  • 376. 18.3.2 copyPixels()方法copyPixels()方法用于将目标位图对象的BitmapData数据按照指定的坐标和矩形区域进行复制,并将复制出的数据作用于另一个位图对象。其用法格式如下所示: copyPixels(sourceBitmapData,sourceRect,destPoint,alphaBitmapData,alphaPoint,mergeAlpha) 参数说明如下: sourceBitmapData:要从中复制像素的目标位图图像。该图像是一个BitmapData实例,也可以指自身BitmapData实例。也就是可以从自身复制一部分。 sourceRect:表示要从目标图像获得区域的矩形。 destPoint:表示将在其中放置新像素的矩形区域的左上角。 alphaBitmapData:表示AlphaBitmapData对象源。 alphaPoint:Point:AlphaBitmapData对象源中与sourceRect参数的左上角对应的点。 mergeAlpha:若要使用Alpha通道,请将该值设置为true。
  • 377. 18.3.3 copyChannel()方法copyChannel()方法实现将一个Bitmapdata对象中某一个通道的数据复制到另一个Bitmapdata对象的某个通道当中。其用法格式如下所示: copyChannel(sourceBitmapData,sourceRect,destPoint,sourceChannel,destChannel) 参数说明如下: sourceBitmapDat:要使用的目标位图图像。此图像可以是自身图像,也可以是另一个图像。 sourceRect:指定要从源图像中复制的矩形Rectangle对象。最大不能超过源图像。 destPoint:获取数据位置的目标Point对象,表示要在其中放置新通道数据的矩形区域的左上角。 sourceChannel:源通道。 destChannel:uint:目标通道。
  • 378. 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。
  • 379. 18.4 使用杂点功能杂点功能用于实现在屏幕上实现类似于电视上“雪花”这样的效果。此类效果一般可以用于背景图像,也可以在动画制作过程中实现动态切换效果。在ActionScript 3.0中有两种方法可以实现此效果,分别为:noise()方法和perlinNoise()方法。
  • 380. 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。
  • 381. 18.4.2 perlinNoise()方法perlinNoise() 方法可以创建更好的有机外观纹理效果,此方法可以生成逼真、有机的纹理,是用于烟雾、云彩、水、火或爆炸的理想图案。其用法格式如下所示: perlinNoise(baseX,baseY,numOctaves,randomSeed,stitch,fractalNoise:,channelOptions,grayScale,offsets) 参数说明如下: baseX:用于决定创建的图案的x大小的值。 baseY:用于决定创建的图案的y大小的值。 numOctaves:用于组合以创建此杂点的octave 函数或各个杂点函数的数目。octave数目越大,创建的图像越精细,但处理时间会更长。 randomSeed:随机种子数的功能与在noise()函数中的功能完全相同。获取随机种子数,尽可能的使用Math.random()方法实现。 stitch:如果设置为true,此方法将尝试缝合或者平滑图像的过渡边缘以形成无缝的纹理,用于作为位图填充进行平铺。
  • 382. 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。
  • 383. 18.5 位图应用效果使用Bitmap和BitmapData类处理位图可以实现很多不同的效果,本节将介绍使用scoll()方法实现滚动位图效果和使用pixelDissolve()方法实现像素溶解的效果。
  • 384. 18.5.1 滚动位图效果在实际应用的过程中,位图常常需要滚动显示,比如大的图片显示,地图显示等等。要实现此效果,可以直接使用BitmapData类的scroll()方法来实现。其用法格式如下所示: scroll(x:int, y:int) 参数说明如下: x:表示水平滚动量的一个整数。 y:表示垂直滚动量的一个整数。
  • 385. 18.5.2 像素溶解效果在ActionScript 3.0中提供了一种位图切换的效果――像素溶解。该效果使用pixelDissolve()方法来实现,其用法格式如下所示: pixelDissolve(sourceBitmapData,sourceRect,destPoint,randomSeed,numPixels,fillColor) 参数说明如下: sourceBitmapData:输入的目标位图图像。源图像可以是另一个BitmapData对象,也可以引用当前BitmapData实例。 sourceRect:定义要用作输入的源图像区域的矩形。 destPoint:目标图像中与源矩形的左上角对应的点。 randomSeed:int:用于开始像素溶解的随机种子数目。 numPixels:每块溶解区域对应的大小,默认值是源区域(宽度x高度)的1/30。 fillColor:uint:一个ARGB颜色值,用于填充其源值等于目标值的像素。
  • 386. 18.6 滤镜类及应用在ActionScript 3.0中加入了滤镜类,使用滤镜类,可以实现改变颜色、形状、大小、旋转或其它显示效果。本节将终点讲述滤镜类及其用法。
  • 387. 18.6.1 滤镜类在ActionScript 3.0中所提供的滤镜都位于flash.filters包中,这些滤镜既可以用于在Flash中创作的显示对象,也可以用于位图对象。使用滤镜可以应用丰富的视觉效果来显示对象,实现模糊、斜角、发光和投影等效果。 常用的滤镜类有6中,如表所示:常见滤镜效果滤镜类说 明BlurFilter可使用BlurFilter类将模糊视觉效果应用于显示对象。ConvolutionFilterConvolutionFilter类应用矩阵盘绕滤镜效果。DropShadowFilter可使用DropShadowFilter类向显示对象添加投影GlowFilter使用GlowFilter类可以对显示对象应用发光效果。GradientBevelFilter使用GradientBevelFilter类可以对显示对象应用渐变斜角效果。GradientGlowFilter可使用GradientGlowFilter类对显示对象应用渐变发光效果。
  • 388. 18.6.2 投影效果在ActionScript 3.0中,可使用DropShadowFilter类向显示对象添加投影效果。其用法格式如下所示: DropShadowFilter(distance,angle,color,alpha,blurX,blurY,strength,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。
  • 389. 18.6.2 投影效果strength:印记或跨页的强度。该值越高,压印的颜色越深,而且阴影与背景之间的对比度也越强。有效值为0到255。默认值为1。 quality:滤镜的品质。也可以使用BitmapFilterQuality常数:BitmapFilterQuality.LOW、BitmapFilterQuality.MEDIUM和BitmapFilterQuality.HIGH。 inner:表示阴影是否为内侧阴影。值true指定内侧阴影。值false指定外侧阴影。 knockout:表示是否应用挖空效果(true),若应用,将有效地使对象的填色变为透明,并显示文档的背景颜色。 hideObject:表示是否隐藏对象本身。如果值为true,则表示没有绘制对象本身,只有阴影是可见的。
  • 390. 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 将使对象的填充变为透明,并显示文档的背景颜色。
  • 391. 18.6.4 浮雕效果在ActionScript 3.0中,可以使用GradientBevelFilter类实现对显示对象或BitmapData对象应用增强的斜角,以产生类似浮雕的效果。也可以在斜角上使用渐变颜色可以大大改善斜角的空间深度,使边缘产生一种更逼真的三维外观效果。其构造函数用法格式如下所示: GradientBevelFilter(distance,angle,colors,alphas,ratios,blurX,blurY,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的乘方值进行优化,呈现速度比其它值更快。
  • 392. 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将使对象的填充变为透明,并显示文档的背景颜色。
  • 393. 18.6.5 渐变发光效果在ActionScript 3.0中,使用GradientGlowFilter类可以实现对显示对象或BitmapData对象应用增强的发光效果。此方法还可以很好的控制发光颜色,从而产生一种更逼真的发光效果。此外,渐变发光滤镜还可以实现在对象的内侧、外侧或上侧边缘应用渐变发光。其构造函数用法格式如下所示: GradientGlowFilter(distance,angle,colorsl,alphas,ratios,blurX,blurY,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的乘方值进行优化,呈现速度比其它值更快。
  • 394. 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将使对象的填充变为透明,并显示文档的背景颜色。
  • 395. 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。模糊效果
  • 396. 第19章 日期与时间日期和时间是在ActionScript3.0编程过程中经常使用的一种信息数据类型。在ActionScript 3.0中,使用Date类来管理日期和时间,用于处理具体的时刻;使用Timer类来处理时间间隔,也就是时间段。Date类的实例中含有各个日期和时间单位的值,其中包括年、月、日、星期、小时、分钟、秒、毫秒以及时区等内容。Timer类可以设置在一定延迟后执行动作,或按重复间隔执行默认动作。
  • 397. 19.1 Date类在ActionScript 3.0中,Date类是顶级类,用于表示日期和时间信息。Date类的实例表示一个特定时间点(时刻),也可以查询或修改该时间点的属性,比如月、日、小时和秒等信息。
  • 398. 19.1.1 创建日期和时间要创建一个日期和时间,需要使用Date类的构造函数。使用此方法,可以构造一个新的Date对象,并未该对象保存指定的日期和时间。依据对构造函数指定的参数不同,可以使用不同的方法来构建不同的日期和时间,具体有4种方式可以选择。 1.不使用参数 2.使用Number类型数据为参数 3.使用String类型数据作为参数 4.使用Date对象的多个参数
  • 399. 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:表示当前的毫秒。
  • 400. 19.1.3 获取月份和星期在ActionScript 3.0中,无论是使用day和months属性,还是使用getDay()和getMonths()方法,获取的星期和月份格式都与中国的使用习惯不同,所以有必要对月份和星期进行处理,以实现更好的使用效果。 要实现格式的转换,只用将中文的日期和星期与getDay()和getMonths()方法获得的数据进行对照,然后进行转换就可以实现。下面的示例先创建两个数组,分别用于存储中文的月份星期,然后使用getDay()和getMonths()方法获取星期和日期之后进行对照,转换成中文的日期。
  • 401. 19.1.4 获取时间间隔要获取两个时间之间的间隔值,可以通过Date对象的time属性,获得两个时间分别相对于1970年1月1日的毫秒数。然后利用两个数字相减,获取时间间隔的毫秒数,最后通过计算,获取相应的时间间隔的表示。
  • 402. 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:计时器事件间以毫秒为单位的延迟时间。如果在计时器正在运行时设置延迟间隔,则计时器将按相同的重复执行次数重新启动计时器。
  • 403. 19.2 Timer类动画制作running:反映计时器的当前状态。如果计时器正在运行,则为true,否则为false。 reset()方法:如果计时器正在运行,则停止计时器,并将当前执行次数属性设回为0,在调用start()方法后,将在此执行程序代码。 start()方法:启动计时器的方法。 stop()方格:停止计时器。若在调用stop()后调用start(),则将继续运行计时器实例,运行次数为剩余的重复次数。 Timer事件:每当Timer对象达到根据delay属性指定的间隔时调度。 timerComplete事件:每当它完成repeatCount设置的执行次数后调度此事件。
  • 404. 19.3 动态时钟实例本节将使用Date类和Timer类,创建一个时钟效果。具体实现原理过程如下: (1)创建时钟和文本内容显示基本内容,包括表盘初始化,指针初始化,文本显示时间初始化等操作,具体通过Dtimer类来实现。代码如下所示: (2)创建动态时钟和文字方式显示效果。此过程使用Timer类的构造函数,控制每秒刷新一次屏幕,实现动态绘制和显示。动态时钟
  • 405. 第20章 声音编程在Flash创建的引人入胜的动画效果当中,声音效果是最容易让人忽略,却又是最吸引人的地方。在动画创作中加入声音元素,能够使动画效果交互性更强,效果更生动。比如可以在视频游戏中添加声音效果,可以在应用程序用户界面中添加音频回馈,甚至可以创建一个分析通过Internet加载的mp3文件的程序。 本章将介绍何加载外部音频文件以及处理SWF中嵌入的声音。还将介绍如何控制音频和从用户麦克风捕获声音等内容。
  • 406. 20.1 声音编程介绍在计算机中声音信息的表示形式被称为数字音频。计算机可以捕获并编码数字音频以及对其进行存储和检索,进而可以通过连接到计算机上的扬声器进行回放。使用Flash Player和ActionScript结合,也能够实现音频文件的回放。 在ActionScript 3.0中,利用载入的数字音频数据,可以随意的来控制声音的音量、或者立体声还是单声道声音。不过在ActionScript 3.0中控制声音之前,需要先将声音信息加载到Flash Player中。ActionScript 3.0提供了4种方法将音频数据加载到 Flash Player 中,分别为: 在运行时加载的外部声音文件。 在应用程序的 SWF 文件中嵌入的声音资源。 来自连接到用户系统上的麦克风的声音数据。 从远程媒体服务器流式传输的声音数据,如Flash Media Server。
  • 407. 20.1.2 Sound类Sound类用于在应用程序中使用声音。利用Sound类创建新的Sound对象、将外部的MP3文件加载到该对象并播放该文件、关闭声音流,以及访问有关声音的数据,比如有关流中字节数和ID3元数据的信息。Sound类方法方法说明close()关闭该流,从而停止所有数据的下载。load(stream,context)启动从指定 URL 加载外部 MP3 文件的过程。play(startTime,loops, sndTransform)生成一个新的 SoundChannel 对象来回放该声音。
  • 408. 20.1.3 SoundChannel类SoundChannel类用于在应用程序中控制声音。在Flash应用程序中,播放的每一个声音都被分配到一个声道,而且应用程序可以具有混合在一起的多个声道。SoundChannel类还包含一个stop()方法、几个用于监控声道幅度的属性,以及用于对声道设置SoundTransform对象的属性。SoundChannel类共有4个属性,1个方法,1个事件,具体内容如下。 leftPeak:只读属性,表示左声道的当前音量幅度,范围从0(静音)至1(最大音量)。 position:只读属性,表示该声音中播放头的当前位置。 rightPeak:只读属性,表示右声道的当前音量幅度,范围从0(静音)至1(最大音量)。 soundTransform:分配给该声道的SoundTransform对象。用于实现音量的控制和调节。 stop()方法:停止在该声道中播放声音。 soundComplete事件:在声音完成播放后调度该事件。
  • 409. 20.1.4 SoundMixer类如果在加载声音文件或视频文件数据的同时播放该文件,则认为是流式传输。通常,将对从远程服务器加载的外部声音文件进行流式传输,以使用户不必等待加载完所有声音数据再收听声音。SoundMixer类就是用于控制嵌入的音频文件在传输声音流之前,预先载入道缓冲区的时间。注意,此类只能控制动态加载的声音文件,而不能控制嵌入道Flash Player中的声音文件。此类有2个属性,3个方法,具体如下所示。 bufferTime:表示在开始传输嵌入的声音流之前,将其预加载到缓冲区中所用的秒数。 soundTransform :控制全局声音属性的SoundTransform对象。 areSoundsInaccessible():确定是否因安全限制而无法访问任何声音,若无法访问,则返回false。 computeSpectrum():获取当前声音波形的快照,并将其放在指定的ByteArray对象数组中。 stopAll():停止当前正在播放的所有声音。
  • 410. 20.2 播放和控制声音要实现在Flash中播放声音,需要把声音文件加载到Flash Player中。加载完之后,就可以利用flash.media包中的类进行播放控制,实现相应的播放效果。本节将首先介绍两种加载声音的方法,然后介绍声音的播放控制和调节。
  • 411. 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毫秒。
  • 412. 20.2.2 加载嵌入声音并不是所有的声音文件都需要加载外部文件。在声音文件本身不大,对生成的SWF文件大小影响不大的情况下,通常使用在Flash中嵌入文件要比使用外部音频灵活性更强,更容易操作。下面的实例介绍在Flash中嵌入声音并加载的方法,具体操作步骤如下所示。导入到库对话框 链接属性
  • 413. 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对象值,默认为空。
  • 414. 20.2.4 显示播放进度通常情况下,在播放音频文件的过程中,需要显示当前正在播放的音频文件的进度值,也就是播放的百分比。利用的原理为:使用Sound类的length属性获取当前音频的总长度;使用SoundChannel类的position属性获取播放头在当前音频的位置,也就是当前播放的长度;然后二者的比值就是当前播放进度值。显示播放进度
  • 415. 20.2.5 控制音量在ActionScript 3.0中,音量的控制,改变的是当前声音通道的音量大小。要实现此效果,需要创建一个SoundTransform对象,然后使用该对象的volume属性来改变SoundTransform对象的音量值,并最后应用与声音通道。 下面的实例先创建一个Slider(滑块)组件,通过在滑块轨道的端点之间移动滑块来调节音量的值。然后使用SoundTransform对象来调节音量发生变化。使用文档类:SoundVolue,代码如下所示。 控制声音音量
  • 416. 20.3 捕获声音输入在ActionScript 3.0中提供了Microphone类拉捕获输入的声音。不过此类主要用于服务器,如Flash Media Server或Flex。不过在没有服务器的情况下也可以使用Microphone类,只是在使用上受到一定的限制。
  • 417. 20.3.1 Microphone类 Microphone类主要用于捕获麦克风的声音,然后将捕获到的声音传递到服务器进行保存。此类的常用属性有11种,如表20-5所示;Microphone类属性 属性数据类型说明activityLevelNumber麦克风正在检测的音量。gainNumber麦克风在传送信号之前应该将信号放大的倍数。indexint麦克风的索引,它反映在Microphone.names返回的数组中。mutedBoolean指定用户是已经拒绝对麦克风的访问(true)还是已经允许对麦克风的访问(false)。nameString当前声音捕获设备的名称,它由声音捕获硬件返回。namesArray所有可用的声音捕获设备的名称。rateint麦克风捕获声音的频率,单位是kHz。silenceLevelNumber激活麦克风并调度activity事件所需的音量。silenceTimeoutint麦克风停止检测声音的时间和调度activity事件的时间之间相差的毫秒数。soundTransformSoundTransform在此麦克风对象处于环回模式时,控制它的声音。useEchoSuppressionBoolean若启用了回音抑制,则返回true;否则返回false。
  • 418. 20.3.2 获取麦克风的音频内容要获取麦克风中输入的声音,需要使用Microphone类的getMicrophone()静态方法,其用法格式如下所示。 Micro对象.getMicrophone(index)访问权限设定 麦克风活动状态
  • 419. 第21章 XMLXML是一种结构化描述信息的标准方法,能够使计算机方便地使用此种类型的数据信息,并且可以非常方便地编写和理解这些信息。XML结构简单,应用灵活方便,尤其在数据交换和移植性上的优点,其迅速成为了行业的应用标准。 在ActionScript 3.0中包含一组基于ECMAScript for XML(E4X)规范(ECMA-357第2版)的类。这些类主要用于处理XML数据,功能强大易用。与以前的编程技术相比,使用E4X可以更快地用XML数据开发代码。 本章主要将简要介绍一下XML语法和结构,然后终点介绍使用E4X技术创建和使用XML数据,实现数据交换。
  • 420. 21.1 XML文件简介XML是eXtensible Markup Language(可扩展标记语言)的缩写。在www.w3.org/XML/网站上提供了XML行业标准。http://www.w3china.org 是XML中文站,上面也有相关的标准信息。 XML文件提供了简便的标准方法对数据进行分类,以使其更易于读取、访问以及处理。XML使用类似于HTML的树结构和标签结构。本节将简要介绍一下XML的语法和结构。
  • 421. 21.1.1 简单的XML文件示例下面是一个关于XML的文件示例,代码如下所示。 as3基础教材 浪子啸天 as3基础教材实例 lzxt
  • 422. 21.1.2 XML语法简单介绍XML的语法非常简单、直白,是一种自描述的语法。一个XML文档最基本的组成包括声明、命名、标记、元素和注释。具体介绍如下: 1.文档声明 2.命名规则 3.元素与标记 元素是构成XML文档的主要内容。XML的元素又是通过标记来定义的,常用的定义方式有两种:非空标记和空标记。 4.注释 注释是在文档中用于说明相关内容的语句,其在文档中没有实际的作用。
  • 423. 21.1.3 XML结构每个XML文档都分为两部分:序言和文档元素。其文档结构如图所示。 对于Flash中应用的XML文档来说,主要的组成部分为:序言、元素和文本,其它的项目使用的并不多。 要设计一个优秀的XML文档,需要实现下面的几个特征: 元素分类要清晰,同类元素的标记要一致,结构相同。 父级子级元素逻辑关系清晰。 要有长远的考虑,便于扩展。 属性和子元素的使用在整个文档中要保持一致。XML文档结构图
  • 424. 21.2 XML对象XML类用于处理XML文件的结构和内容,其中包含很多属性和方法。本节将利用XML类的属性和方法,来实现对XML文件的加载、访问和修改。
  • 425. 21.2.1 构造XML对象在ActionScript 3.0中,能够创建XML对象的方法有以下几种,分别为: 传递XML格式字符串给XML的构造函数。 创建XML对象并直接使用XML进行赋值。 创建一个空的XML对象,然后使用E4X填充数据。 创建空的对象,从外部读取数据。 1.使用构造函数创建XML对象 2.直接创建XML对象并赋值 3.动态创建XML对象
  • 426. 21.2.2 加载XML文件在ActionScript编程中,所使用的XML文件通常都采用的是外部的XML文件,这就需要先加载外部的XML文件。加载的过程如下: (1)使用URLRequest类创建URL链接地址信息。 (2)使用URLLoader类的方法从指定的URL获取XML格式数据。 具体的介绍请参加22.2节。 下面的实例实现加载外部的XML文件,首先创建一个XML文件test.xml,内容如下所示。 as3基础教材 浪子啸天 as3基础教材实例 lzxt
  • 427. 21.2.3 增加XML元素和属性在ActionScript 3.0中,提供了两个简单的运算符来实现在XML对象中添加元素和属性,分别为点号“.”,属性标识运算符“@”。 XML类是一个动态类,所以在其对象上添加元素和属性,就和向一个对象(Object)实例添加属性的方法相同。 下面的示例实现在XML对象中添加1个元素和2个属性,代码如下所示。 //使用XML直接创建XML对象并赋值 var myxml:XML= as基础教材 450-650 ; //输出新的XML对象 trace(myxml);
  • 428. 21.2.4 删除XML元素和属性要删除XML对象中的一个子元素或者属性,只需使用delete关键字执行删除指令即可。下面的示例实现删除XML对象中的元素和属性,代码如下所示。 //使用XML直接创建XML对象并赋值 var myxml:XML= as基础教材 450-650 <新元素/> //输出新的XML对象 trace(myxml);
  • 429. 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);
  • 430. 第22章 AS3.0与网络通信Flash之所以能够有着越来越大的发展空间,其良好的数据交互功能也起着极为重要的作用。在ActionScript 3.0中,所有的与外部数据进行交互的功能都被放在flash.net.*包中,有专门的类进行管理,而且实现了流程的的标准、统一,使Flash与外界数据的交互更加的清晰与简单。 本章讲着重介绍ActionScript 3.0与外界数据交互的原理、Flash与外部数据的连接和交互以及Flash与计算机本地数据的交互操作。
  • 431. 22.1 数据通信基础在创建复杂的ActionScript 3.0应用程序时,通常需要与服务器端脚本进行通信,或者从外部 XML 文件或文本文件加载数据。 在ActionScript 3.0中,使用URLLoader和URLRequest类来加载外部文件。加载成功的文件可使用特定类来访问数据,具体使用何类,取决于加载数据的数据类型。比如如果加载数据的格式为名称值对类型,则可以使用URLVariables类来分析服务器结果。如果加载的文件是外部XML文档,则可以使用XML类的构造函数、XMLDocument类的构造函数或XMLDocument.parseXML()方法来分析XML文档。 本节讲介绍数据通信的原理、从外部文件或服务器脚本中加载数据和将数据发送到服务器脚本方法。
  • 432. 22.1.1 构建通信请求过程在ActionScript 3.0中,要实现一个网络通信,需要三个过程来实现,具体为: (1)使用URLRequest创建通信请求对象。 (2)使用通信请求对象,创建URLLoader载入对象,并发出请求的要求。 (3)监听URLLoader对象,在响应完成事件后,返回要处理的数据。 下面来逐步介绍通信的过程和方法。 1.构建通信请求对象 2.发出数据请求 3.获取返回数据
  • 433. 22.1.2 加载文本格式数据文本格式数据包括:普通文本、XML、HTML等以UTF-8字符组成的字符串文本都属于文本格式。 下面的示例实现从外部的test.html文件种读取数据,并把它显示在文本框中,实现读取外部html网页格式文本的效果。test.html文本内容如图所示。test.html文本内容
  • 434. 22.1.3 加载值对格式数据如果要加载的外部文本时值对格式的数据,并且以URL形式编码,则需要将URLVariables的dataFormat类型设置为URLLoaderDataFormat.VARIABLES。一般的值对格式的数据样式如下所示。 variable1=value1&variable2=value2。 下面的示例实现从外部的test.txt文档中取得值对格式的数据,并在Flash中使用文本进行显示。test.txt文档内容如下所示。 标题=AS3.0基础教材&作者=浪子啸天&支持网站=http://www.flasc.cn
  • 435. 22.1.4 加载二进制格式数据二进制文件是指包含在ASCII及扩展ASCII字符中编写的数据或程序指令的文件。计算机文件基本上分为二种:二进制文件和ASCII(也称纯文本)文件,图形文件及文字处理程序等计算机程序都属于二进制文件。ASCII则是可以用任何文字处理程序阅读的简单文本文件。 在ActionScript 3.0中,二进制文件主要是为了强调与文本文件的区分,大部分的非文本格式文件都被归为二进制文件。在ActionScript 3.0中,所有的图像、SWF文件都可以以二进制格式载入,以ByteArray字节数组来表示,此数组储存在URLLoader对象的data属性中。
  • 436. 22.1.5 发送数据如果需要向服务器发送数据,可以有两种方式可供选择:一是若只是发送不需要返回数据,则可以使用sendToURL()方法来实现,其用法格式如下: sendToURL(req:URLRequest) 二是既需要发送数据,也需要返回数据,则使用Loader对象的load()方法来实现。通常的数据发送需要执行下面的两步操作: (1)将需要提交的数据放入URLRequest对象的data属性中,然后使用URLLoader对象的load()方法发送数据。 (2)从URLLoader对象的data属性中获取返回的数据并分析。 下面的示例实现将Flash中的数据发送到后台的asp文件中,并返回响应的数据信息。
  • 437. 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”指定当前窗口中的顶级框架中打开网址。
  • 438. 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会立即接收它作为该调用的返回值。
  • 439. 22.2.1 JavaScript脚本简介JavaScript是一种基于对象和事件驱动并具有安全性能的脚本语言,此语言可以被嵌入到HTML文件之中。使用JavaScript,可使网页变得生动,能够重复使用同一段代码,能够使与HTML文断简化,减少下载时间。 javaScript语言有很多优点,具体如下: 1.使用简单 2.动态交互 3.跨平台操作 4.节约页面资源
  • 440. 22.2.2 在网页中加入JavaScript有两种方法可以实现在网页中加入JavaScript代码,分别为:直接加入HTML文档和间接引用js文件。 1.直接加入HTML文档 2.间接引用js文档JavaScript示例代码 HTML中JavaScript输出效果
  • 441. 22.2.3 Flash向JavaScript传递数据要实现Flash向JavaScript传递数据,可以使用ExternalInterface类的call()方法采用异步调用的方式调用JavaScript的函数来实现。所谓的异步调用,指的是无需等待函数的返回值就让操作继续进行的函数调用方式。 ExternalInterface类的call()方法,语法格式如下所示。 call(functionName:String,...arguments) 说明:此方法为FlashPlayer容器公开的函数,不传递参数或传递多个参数。如果该函数不可用,调用将返回null;否则,它返回由该函数提供的值。
  • 442. 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函数。
  • 443. 22.3 So本地数据存储Flash影片运行过程中,大多数的数据都存储于影片本身,一旦影片被关闭,这些数据也就从内存中被清除掉,下次运行时,数据将从头开始。若想存储数据或者让客户端的多个影片共享同一组数据,就要想办法把数据存储在Flash播放器之外。 在ActionScript 3.0中,SharedObject类实现了在客户端机器中持久性存储数据。有两种类型的共享对象:本地和远程。本节主要介绍在本地储存数据。
  • 444. 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,在此主目录下使用随机字符命名目录,记录数据。
  • 445. 22.3.2 向SO上写入数据要实现添加数据到SO上,只需给SO对象的data属性添加属性值。共享对象SO有个内建的属性data,data属性类型为object,因而可以添加任何信息上去。如下面的示例代码所示。 //存储username值给so共享对象 so.data.username= "浪子啸天"; 注意:既不能直接向SO共享对象赋值,也不能直接向SO共享对象的data属性赋值,这样的结果都是错误的。 如下面的两行写入数据的方法都是错误的,错误代码如下所示。 so.username="浪子啸天"; so.data="浪子啸天";
  • 446. 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)//输出:男
  • 447. 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)//输出:浪子啸天
  • 448. 第23章 AS3.0异常处理异常处理是指处理应用程序在编译时或运行时所发生的错误。如果应用程序能够处理异常错误,则在遇到错误时,应用程序会执行“一些动作”作为响应,而不是没有任何响应并且引发该错误的进程在没有提示的情况下发生失败。正确使用异常处理有助于防止应用程序和应用程序的使用者执行其它意外行为。 本章重点处理运行时错误的方法、异常的不同类型以及ActionScript 3.0中新的错误处理系统的优点。
  • 449. 23.1 异常和错误基础知识异常(Exception)是指在程序运行时发生的错误,并且运行时环境(即Flash Player)无法自行解决该问题。 所谓的运行时错误是指在Adobe Flash Player中运行ActionScript内容的ActionScript代码中所出现的错误。要确保平稳地运行ActionScript代码,就必须在应用程序中编写能够处理该错误的代码,即修正该错误,解决该问题,至少让用户知道发生了什么错误。此过程称为“错误处理”。 所谓的捕获(Catch)异常是指如果发生了异常即运行时错误,并且代码注意到该异常,则认为该代码“捕获”了异常。捕获异常后,Flash Player将停止通知其对应的ActionScript代码发生了异常。 运行时错误可以分为以下两类: 程序错误:指ActionScript代码中的错误,比如为方法参数指定了错误的数据类型。 逻辑错误:指程序的逻辑(数据检查和值处理)错误。
  • 450. 23.2 使用try-catch-finally处理异常在ActionScript 3.0编程过程种,最常见的错误处理是同步错误处理逻辑,可以通过在处理逻辑中在适当的位置插入响应的语句,以便在运行时捕获同步错误。这种错误处理能够使应用程序在功能失败时注意到发生运行时错误并从错误中恢复。同步错误捕获逻辑中使用try..catch..finally语句,这种方式将先尝试(try)某个操作,然后捕获(catch)来自Flash Player的任何错误响应,最后(finally)执行另外的操作来处理失败的操作。
  • 451. 23.3 错误(errors)类Flash中所包含的错误类是Flash Player应用程序编程接口(API)的一部分,而不是ActionScript核心语言的一部分。这些错误类位于flash.error包中,不同的类对应了不同类别的异常错误处理。 在ActionScript 3.0中包含的错误类有7个,如表所示。   类说 明EOFError如果尝试读取的内容超出可用数据的末尾,则会引发 EOFError 异常。IllegalOperationError当方法未实现或者实现中未涉及当前用法时,将引发 IllegalOperationError 异常。InvalidSWFErroFlash Player 遇到损坏的 SWF 文件时,将引发此异常。IOError某些类型的输入或输出失败时,将引发 IOError 异常。MemoryError内存分配请求失败时,将引发 MemoryError 异常。ScriptTimeoutError达到脚本超时间隔时,将引发 ScriptTimeoutError 异常。StackOverflowError可用于脚本的堆栈用尽时,ActionScript 将引发 StackOverflowError 异常。错误类
  • 452. 23.3.1 输入输出异常(IOError)类 输入输出异常是指当某些对象的输入或输出操作失败时,将会引发IOError异常。例如,如果在尚未连接的或已断开连接的服务程序上尝试读/写操作,将引发IOError异常。输入输出异常
  • 453. 23.3.2 读取异常(EOFError)类读取异常是指在读取某些数据时,超出了数据的范围,从而引发异常。比如在读取数组的时候,当索引超过数组长度的时候,就会引发异常。读取异常
  • 454. 23.3.3 堆栈异常(StackOverflowError)类堆栈异常是指当脚本资源被无限损耗时引发的异常。此异常常出现于无限递归,在此种情况下,需要将终止case语句添加到该函数中。堆栈异常
  • 455. 23.3.4 非法操作异常(IllegalOperationError)类非法操作异常是指当方法未实现或者实现中未涉及当前用法时,将引发此异常。 下面的示例尝试使用重载的addChild()方法在舞台上增加显示对象,造成非法操作异常。使用文档类:IllegalOperationErrorExample,非法操作异常
  • 456. 第24章 课件应用实例在当前的教育教学过程中,采用多媒体课件教学,已经成为一种时尚。在应用比较普遍的多媒体课件中,flash课件由于其生动活波的效果,较小的体积,成为课件中的精品。 下面就一起来共同学习一下整个教学课件的制作步骤,希望能够对工作在教学第一线的朋友们有所帮助。
  • 457. 24.1 课件设计与需求分析课件设计的首要环节,就是要做好课件的设计流程和设计需求,然后才能够进行完整的课件制作。本节先简单介绍一下多媒体课件的概念和分类,然后对本课件的设计需求进行分析,构建好本课件的设计过程。
  • 458. 24.1.1 课件介绍Flash课件根据教学的内容和需求,一般可以分为以下几种类型: 模拟实验类:此类课件应用在理科如物理、化学、生物等学科中,主要目的是模拟那些不容易演示或者不太容易观察的实验。 动态演示类:此类课件主要用于理科的数学、文科的语文等学科中,主要目的是把原来静态的内容动态化,或者把僵硬的内容形象化,提高学生的学习兴趣。 教学游戏类:此类课件主要用在低年级的教学中,其目的主要是增强教学内容的趣味性,使学生能够在娱乐中获取知识。 反馈交互类:此类课件在各个科目的课件中都会用到,主要目的是练习教学内容,反馈教学得失。 培训课程类:此类课件主要用于企业和政府的培训课程中,目的是增强学习的趣味性,提高学习的有效性,并能够通过系统进行及时的反馈,实现良好的效果。
  • 459. 24.1.2 课件设计需求分析本章将以Adobe Flash CS3为工具,利用ActionScript 3.0为编程语言,制作一个高中物理教学课件。本例选择版本为人民教育出版社出版全日制普通高级中学课本(必修)中第一册第五章第三节的内容《平抛物体的运动》。本节课由本人设计、讲授,对教学内容有比较深刻的认识和理解。课件的设计和制作,主要针对教学的实际需要,做到简繁适当,内容清晰直观。当然,针对地区的不同、教材的不同、学生实际情况的不同,课件也会相应的修改和变动。为了适应教学的需求,本课件主要针对知识进行探究,利用动画效果来模拟显示平抛运动的规律。由于篇幅有限,模拟动画对应的文字描述,在本例中不再添加,具体请查看源文件。
  • 460. 24.2 课件设计过程本节将利用ActionScript 3.0编程原理,实现在Adobe flash CS3中进行动画编程,实现一个完整课件的制作过程。
  • 461. 24.2.1 设计准备与素材准备在课件设计的过程中,有大量的文件和素材需要准备,本节将着重介绍本课件制作过程中所需要创建的基本文件和元件,方便后面的编程和使用。 1.创建文档 2.创建素材“小球” 3.创建素材按钮 4.多选框(CheckBox)组件介绍 5.场景复制和重命名
  • 462. 24.2.2 Loading制作在Adobe Flash CS3文档中创建自身的Loading,所加ActionScript 3.0的代码帧上最好不要放其他元件,或单独用一个场景,否则将看不到Loading的效果。所以在这里单独使用一个空白场景作为Loading场景。把当前场景的名称修改为“loading”。 要实现Loading,需要完成下面的几项任务: (1)创建一个文本框,用于显示进度的值。 (2)创建两个矩形,通过缩放其中的一个,表示加载进度与总进度的关系。 (3)创建加载过程的事件处理函数,用于监听加载进度并控制文本框内容和矩形的缩放。 (4)创建加载完成的事件处理函数,用于在加载完成时删除创建的显示对象,并播放进入下一场景。 (5)在当前根路径注册控制加载的两个事件处理函数。
  • 463. 24.2.3 封面设计和变量初始化课件的封面是第一时间呈现在学生面前的,一个优秀的界面设计可以吸引学生的注意力,将学生的思想带入一个假象的科学范畴之内。 封面设计作为一个单独的场景存在,单击【窗口】|【其它面板】|【场景】,打开场景面板,单击添加场景按钮,添加一个新场景,并修改场景名称为“首页”。在本场景创建封面内容。本例采用蓝色为基调,使用渐变颜色和颜色反差来衬托动画。具体的设计过程在此不在细述,效果如图所示。封面效果图
  • 464. 24.2.4 平抛运动演示在场景面板中,选中并复制场景“首页”,创建一个新的场景并命名为“演示”。然后对场景进行一下处理,仅保留背景内容。 在此场景中,将实现平抛运动的模拟演示。具体需要实现的功能如下: 创建一个坐标,用于对照小球的运动位置。 加载三个不同颜色的小球,分别做水平向右直线运动,竖直向下直线运动和平抛物体运动。 利用Timer类控制小球的播放、停止和重置。 使用复选框控制是否“记录位置”和是否“绘制轨迹”。
  • 465. 24.2.5 平抛运动分运动规律在场景面板中,选中并复制场景“演示”,创建一个新的场景并命名为“分运动规律”。其它保持不变。 在此场景中,将实现对平抛运动的分运动规律的探究。具体需要实现的功能如下: 在坐标原点加载三个不同颜色的小球,分别做水平向右直线运动,竖直向下直线运动和平抛物体运动。 利用Timer类控制小球的播放、停止和重置。 使用复选框控制是否“显水平线”和是否“显竖直线”。此处是本场景演示的重点,利用绘制出的线条的关系,来确定平抛运动在水平和竖直方向各自做什么运动。
  • 466. 24.2.6 平抛运动速度规律在场景面板中,选中并复制场景“分运动规律”,创建一个新的场景并命名为“速度变化规律”。其它保持不变。 在此场景中,将实现对平抛运动的速度规律的探究。具体需要实现的功能如下: 在坐标原点红色小球,控制其平抛物体运动。 创建一个输入文本和两个动态文本,用来输入“水平速度”和显示“竖直速度”和“合速度”。 利用Timer类控制小球的播放、停止和重置。 使用复选框控制是否“绘制轨迹”。 使用向量绘制方法,绘制箭头线来表示速度的大小和方向,并进行平行四边形合成。
  • 467. 24.2.7 平抛运动位移规律在场景面板中,选中并复制场景“速度变化规律”,创建一个新的场景并命名为“位移变化规律”。其它保持不变。 在此场景中,将实现对平抛运动的位移规律的探究。具体需要实现的功能如下: 在坐标原点红色小球,控制其平抛物体运动。 创建一个输入文本和三个动态文本,用来输入“水平速度”和显示“竖直位移”“水平位移”和“合位移”。 利用Timer类控制小球的播放、停止和重置。 使用复选框控制是否“绘制轨迹”。 使用向量绘制方法,绘制箭头线来表示位移的大小和方向,并进行平行四边形合成。位移变化规律效果图
  • 468. 24.2.8 反馈练习在场景面板中,选中并复制场景“位移变化规律”,创建一个新的场景并命名为“反馈练习”。把其中的坐标系,文本内容以及复选框全部删除,只保留3个功能按钮即可。 在此场景中,将实现对平抛运动的分运动规律的探究。具体需要实现的功能如下: 在坐标原点红色小球,控制其平抛物体运动。 创建一个输入文本和三个动态文本,用来输入“水平速度”和显示“竖直位移”“水平位移”和“合位移”。 利用Timer类控制小球的播放、停止和重置。 使用复选框控制是否“绘制轨迹”。 使用向量绘制方法,绘制箭头线来表示位移的大小和方向,并进行平行四边形合成。飞机投弹效果图
  • 469. 24.2.9 跳转及功能按钮实现跳转按钮是指在不同场景之间进行转换时所使用的按钮,功能按钮主要是指文档的关闭和最大化、最小化按钮。 1.跳转按钮 2.功能按钮课x件实例最终效果图
  • 470. 第25章 游戏应用实例网络游戏的flasher,总是渴望使用Flash制作一款功能强大,交互性强,便于操作,易于传播的网络游戏。越来越多的Flash爱好者已经不再满足仅仅去欣赏别人制作的Flash,或者玩别人制作的Flash游戏,而是希望自己也能投入到Flash游戏制作者的行列,成为一个Flash游戏高手。 本章,将创建一个博彩类的竞猜游戏“数字猜猜猜“。利用该游戏实例让广大的游戏爱好者了解一下Flash在制作游戏时的基本思路和方法。
  • 471. 25.1 Flash游戏介绍及原理和流程本节将对Flash游戏进行简单的介绍,并按照当前Flash游戏的状况,对其进行分类。然后着重介绍本实例游戏的实现原理和实现流程。
  • 472. 25.1.1 Flash游戏介绍Flash游戏是以Flash为创作工具,并以Flash Player播放器为主要显示平台的一种新兴的游戏形式。Flash游戏的特点是比较简单,操作方便,绿色且无需安装,文件体积小。正因为有这样显著的特点和有点,现在已经深受广大网友的喜爱。Flash游戏的兴起并迅速成为热门游戏类型,使得现在的Flash小游戏开发速度变得更快,几乎每一天都有新的flash小游戏出现,并且种类繁多,花样百变,层出不穷。比如在网络上风靡一时的连连看游戏,密室逃脱类游戏,美少女彩衣彩妆游戏等等,都受到游戏玩家的欢迎和好评。 Flash游戏,根据游戏制作的目的以及玩游戏的方式,一般分为以下几种: 动作类,主要是搏击、战斗为主。 趣味类,主要以趣味游戏,引人发笑为主。 博彩类,主要竞猜为主。 赛车类,主要以速度为主。 射击类,主要以点击发射为主。 棋牌类,以棋牌类游戏为主。
  • 473. 25.1.2 数字猜猜猜游戏原理及实现流程数字猜猜猜游戏是一个经典的小游戏,各种编程语言都能编写出该游戏。本节将介绍其实现原理和实现流程。 1.数字猜猜猜游戏原理 数字猜猜猜是一款经典的益智类游戏,此游戏主要侧重于培养玩家在数字方面的智力和反应能力。 2.数字猜猜猜游戏实现流程 数字猜猜猜游戏的是实现流程比较简单,具体流程如下:出题→用户输入→确认输入→输入数据分析→判断结果→游戏反馈,给出提示。
  • 474. 25.2 游戏准备本节将主要针对两个核心环节进行分析研究,并给出处理方法,这两个环节为:出题环节中随机数字的产生和数据分析环节中的数据校验的方法。
  • 475. 25.2.1 随机数字产生方法游戏开始之后,出题阶段的核心任务就是产生所需要的一组随机数字。 按照本例的设计要求,产生的一个指定个数的由0-9数字组成的不重复的数组。该数组的产生方法分为三步来完成:产生一个随机数字;产生一个指定范围的随机数字;产生由不重复的数字组成的数组。这三步的核心是产生数组的环节。 产生不重复数字的流程将使用下面的过程来实现:先创建一个指定范围的随机数,然后和数组进行比照,若该数字在数组中不存在,写入数组;若数组中已经存在,不写入数组,最后返回,重新循环,直到完成所需的数字个数。具体的产生流程如图所示:随机数字产生流程图
  • 476. 25.2.2 输入数据分析对用户输入的数据进行分析判断是游戏处理的关键。数据的判断分为两个部分,分别为:数据有效性确认:包括数据长度是否足够指定位数;输入的是否全部为数字;输入的是否有重复的数字。 数据校验:包括检验输入的数字是否和谜底数组中的数字是否完全相同;若不相同,需要检验位置、数字都相同的数字有几个,数字正确但位置不正确的数字有几个。 这些输入数据分析的部分要求通过CheckInt类来来实现,此类中包含了5个方法,分别为: checkLength(_len:int):检查输入文本数组长度是否和指定长度_len相同,若相同,返回true,否则返回false。 checkChar():检查输入文本数组中是否含有非数字字符,若存在,返回false,否则返回true。 checkRepeat():检查输入文本数组中的数字是否有重复数字。若有,返回false,否则返回true。 checkTRight():将输入文本数组中的数字与谜底数组中的数组进行对照,返回数字和位置都正确的数字的个数。 checkRight():将输入文本数组中的数字与谜底数组中的数组进行对照,返回数字正确,但位置不正确的数字的个数。
  • 477. 25.3 游戏设计实施本节将详细介绍整个游戏设计的流程和实施的具体方法,通过本节内容,能够使读者很好的掌握游戏设计的流程。
  • 478. 25.3.1 游戏初始化本游戏的主场景的内容主要分为三部分,分别为: 静态部分:包括静态的文字内容,动态文本框。 输入部分:主要是指用于输入的文本框。 控制按钮:主要是用于实现数据交互的按钮和其它控制按钮。 此外,初始化操作,还需要初始化变量,获取谜底数组。
  • 479. 25.3.2 创建静态场景部分静态场景部分主要包括两段文本内容和一个大的动态文本框。文本框的需要使用多行文本,设置背景演示,便于区分。这些内容均使用TextFiled类来实现。静态场景使用initscene()方法来实现,在GuessInt类中加入此方法,静态场景部分图
  • 480. 25.3.3 创建输入文本并获取输入内容输入文本框在本例中需要四个,不过为了后续扩展的需要,本例将先构造一个创建输入文本框的方法,创建一个文本框并返回,然后使用循环进行创建符合要求的文本框。创建文本框的方法为initinput(),将其加入GuessInput文档类,输入文本效果图
  • 481. 25.3.4 创建控制按钮在本游戏中,需要使用的控制按钮有三个,其名称及功能分别如下: 猜一猜按钮:此按钮执行数字猜测任务,单击此按钮,开始分析输入数据并返回分析结果。 清空按钮:在检测之后发现猜测不正确,利用清空按钮清空输入框,可以继续再一次进行猜测。 再来一次按钮:此按钮在10次猜测不正确或者想重新产生一组数据进行猜测时使用。按钮效果图
  • 482. 25.3.5 数据判断分析数据判断分析的过程是该游戏的核心。整个判断过程需要判断数据的有效性,并反馈数据校验的结果。判断的流程如图所示:数据判断流程图
  • 483. 第26章 Flash留言本实例通常在个人站点的设计过程中,留言本是一个不可缺少的部分。通过留言本,可以获取访问者对网站的反馈信息,进而实现网站的交换性。本章将Flash与asp后台相结合,实现一个简单的RIA(Rich Interface Applications)网络应用范例。
  • 484. 26.1 前期准备本节主要进行前期准备工作,首先对要实现的留言本的功能及实现流程加以分析;然后讲解IIS服务器的架设和环境测试;最后讲解Access数据库的安装和创建。
  • 485. 26.1.1 留言本功能和流程分析Flash留言本是网络中常用的,功能比较齐备、交互比较方便的留言系统,在本节主要介绍其实现的流程和想对应板块的功能分析。 1.主要功能 留言本的功能主要有两个,分别为: 发表留言功能:访问者需要输入昵称、QQ、Email等基本信息和留言标题和留言内容。然后选择提交留言进行发表。 浏览功能:用户进入留言本后即可访问所有的留言,此外还需要支持分页显示和翻页浏览功能。 2.实现流程流程图
  • 486. 26.1.2 Windows XP下IIS服务器的架设IIS,指Internet Information Server,即互联网信息服务,是一种Web(网页)服务组件。在IIS中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,使用它能够实现在网络(包括互联网和局域网)上很容易的发布信息。本节将介绍在Windows XP环境中架设自带的IIS 5.1服务器,并进行配置和管理。添加或删除程序窗口
  • 487. 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代码的语言。
  • 488. 26.1.4 安装Access数据库Access数据库属于微软公司的Microsoft Office软件的一部分,在安装Microsoft Office可以选择是否安装。在此选择安装Access数据库,本书以Microsoft Office 2003为例,下图显示在安装过程中选择组件的情况,如图所示。安装Access数据库 Microsoft Access 2003图标
  • 489. 26.1.5 创建Access数据库本节将利用Aceess程序建立数据库。具体操作步骤如下所示。新建数据库 保存数据库
  • 490. 26.2 Flash前台制作Flash前台部分,主要执行留言内容的显示和浏览,执行签写留言操作。具体分为这样及部分来完成: 创建基本元件,包括静态、动态和输入文本元件,文档背景元件和按钮元件。此部分使用Creat类来实现。 创建详细场景和面板。此部分使用Csence类来实现。 显示和浏览留言部分,在Main文档类中实现。 发表留言部分,在Main文档类中实现。
  • 491. 26.2.1 创建基本元件创建基本元件的方法,位于Creat类中。此类提供的方法包括: creatTitle():创建一个场景显示标题,此标题被加上了滤镜效果。 creatStaticText():创建静态文本的方法。 creatDyText():创建多行动态文本的方法。 creatInputText():创建单行输入文本的方法。 creatMInputText():创建多行输入文本的方法。 creatButton():创建按钮的方法。 creatbg():创建显示留言的背景。 creatAlertbg():创建提示面板的背景。
  • 492. 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() { }
  • 493. 26.2.3 显示和浏览留言显示和浏览留言的流程为:从数据库获取留言信息→分析留言数据信息→加载显示面板→显示留言→翻页按钮,进行浏览。 具体的程序代码,使用文档类:Main。代码如下所示。显示和浏览留言效果图
  • 494. 26.2.4 发表留言发表留言的实现流程为:单击显示场景的【签写留言】按钮→初始化签写留言场景→填写留言内容→单击【发表留言】按钮,发表留言或者单击【返回首页】按钮,取消发表留言,返回。→若发表留言,则执行后台程序,写入数据库。签写留言效果图
  • 495. 26.3 后台支撑部分后台支撑部分由三个asp文件组成,分别为:conn.asp、getly.asp和fbly.asp。分别用来执行连接数据库,获取留言和发表留言三个环节。 (详细内容请参照本书) 说明:发表留言环节,主要是将获取的数据写入数据库,实现数据的出错。 至此,本例后台部分全部完成。
  • 496. 26.3.1 连接数据库asp中也可以将连接数据库的方法定义为一个函数,在需要使用的页面中包入定义函数的页面,就能够使用了。本节将定义连接和关闭数据库的函数,代码如下所示。
  • 497. 26.3.2 获取留言获取留言的流程如下:获取需要打开的页码→打开数据库→建立数据集→获取符合条件的数据→对数据进行组合→输出数据。实现的代码如下所示。
  • 498. 26.3.3 发表留言发表留言的流程为:获取flash发送过来的数据→打开数据库→建立数据集→追加数据,写入数据库→关闭数据库,完成操作。具体的实现代码如下所示。