as3如何储存上一次as3.0 点击关闭命令的位置

相关文章推荐
File仅限于AIR
File 对象表示文件或目录的路径。这可以是现有的文件或目录,也可以是尚不存在的文件或目录(例如,它可以表示希望创建的文件或目录的路径)。
File 类具有...
谈到在AS3中另存为一个本地文件,许多人会马上想到使用navigateToURL来实现,但是这样做有一个很大的缺陷,那就是在另存为时会调用网页浏览器,以下载的方式另存为,在配置较差的电脑上肯能会卡机,...
---------------------- android培训、java培训、期待与您交流! ----------------------
一.Collections
1.什么是Colle...
1.文件目录的List操作:
Java中,File类其实代表文件的路径,它既可以代表一个特定文件的文件,也可以代表一个包含多个文件的目录名称。如果File代表目录,可以使用List列出目录中文件...
1.文件目录的List操作:
Java中,File类其实代表文件的路径,它既可以代表一个特定文件的文件,也可以代表一个包含多个文件的目录名称。如果File代表目录,可以使用List列出目录中文件。
...
转换步骤(新目录结构):
全新的Android Gradle Project目录结构
1.在AS中import
● 新用户● 老用户: File–>New–>Import Project● ...
题目:写一个程序把当前目录下的TEST.TXT文件中的字符内容读出来并显示在屏幕上,当遇到结束符时就停止读取。
我的test.txt中的内容是:
程序的运行结果如下:
我写的源代...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)当前位置: >>
AS3.0自学教程
第1章 AcionScript 3.0概述? ActionScript 3.0是针对Flash Player运行时环 境的编程语言,它用于处理各种人机交互、数据 交互等功能。本章将粗略的介绍ActionScript语 言的发展历史、新增特色、编程环境等内容,以 及第一个ActionScript3.0程序。 1.1 关于ActionScript 3.0? ActionScript3.0是随着Adobe Flash CS3和Flex 2.0的推出而同步推出的脚本编程语言。本节将对 ActionScript3.0进行简要的介绍,并通过一些具 体的实例图片,展示了常见的ActionScript的应 用领域。 1.1.1 ActionScript 3.0介绍? ActionScript3.0与ActionScript以前的版本有个本质上的 不同。它是一门功能强大、符合业界标准的一门面向对象 的编程语言。它在Flash编程语言中有着里程碑的作用,是 用来开发富应用程序(RIA)的重要语言。 ? ActionScript 3.0在用于脚本撰写的国际标准化编程语言 ECMAScript的基础之上,对该语言做了进一步的改进,可 为开发人员提供用于丰富Internet应用程序(RIA)的可靠 的编程模型。开发人员可以获得卓越的性能并简化开发过 程,便于利用非常复杂的应用程序、大的数据集和面向对 象的、可重复使用的基本代码。ActionScript 3.0在Flash Player 9中新的ActionScript虚拟机(AVM2)内执行,可 为下一代RIA带来性能突破。 1.1.2 ActionScript 3.0能做什么? 最初在Flash中引入ActionScript,目的是为了实现对Flash影片的播放控 制。而ActionScript发展到今天,其已经广泛的应用到了多个领域,能够 实现丰富的应用功能。 ActionScript 3.0最基本的应用与创作工具Adobe Flash CS3结合,创建 各种不同的应用特效,实现丰富多彩的动画效果,使Flash创建的动画更 加人性话,更具有弹性效果。这些基础应用当中,应用最为广泛的就是使 用ActionScript脚本控制的弹性菜单。下面是一个弹性的效果,? 1.2 ActionScript 3.0的新特色? ActionScript 3.0包括二部分:核心语言和Flash Player API。核心语言用于定义编程语言的基本 结构, 比如声明变量,创建表达式控制程序结构 和数据类型等。Flash Player API是由一系列用 于实现特定功能的flash player类组成。 1.2.1 核心语言的新特色? ActionScript3.0核心语言与ECMAScript标准兼容,并和新 改进的一些功能区域进行结合。下面是对一些其开发者方 便的地方和用法总结的一些新特点: ? 1.运行时的异常处理机制 . ? 2.运行时类型 . ? 3.密封类 . ? 4.闭包方法 . ? 5.E4X . ? 6.正则表达式 . ? 7.命名空间 . ? 8.新基元类型 . 1.2.1 Flash Player API 新功能? Flash Player API为增强Flash Player容纳 ActionScript语言的能力而引入的一组类和功能。 这种功能把ActionScript核心语言和Flash平台之 间建立了一座桥梁,大大提高了Flash应用程序的 能力,并对核心语言起到了重要的补充作用。下 面列出一些Flash Player API功能的新特点: ? 1.DOM3事件模型 . ? 2.显示列表API . 1.3 Flash CS3的动作面板介绍? Flash CS3中可以使用动作面板、“脚本窗口”或 者外部编辑器的创作环境中田间ActionScript代 码。本节就来介绍一下Flash CS3的动作面板窗口 和Flash CS自带的编辑器窗口,并将详细的介绍 功能按钮的作用。 1.3.1 动作面板概述? ? ? ? ? ? ? ? 如果要在Flash CS3中加入ActionScript代码,可以直接使用动作面板来输入。 要打开动作面板,请执行下面的操作:单击【窗口|【动作】,或者按【F9】。 打开后的动作面板如图所示。 下面对图中各部分的名称及作用加以说明。 A:脚本窗格,用于输入代码的地方。 B:面板菜单,单击后可显示动作面板功能菜单 C:动作工具箱,可以通过双击或者拖动的方式将其中的ActionScript元素添加到脚 本窗格中。 D:脚本导航器,其有两个功能,一是通过单击其中的项目,可以将与该项目相关的 代码显示在脚本窗口中,二是通过双击其中的项目,对该项目的代码进行固定操作。 1.3.2 脚本窗口概述? Action Script 3.0是很好的面向对象编程语言, 同样Flash CS3也提供了一个很不错的脚本编辑器, 这就是Flash的脚本窗口。使用脚本窗口可以创建 或者导入外部的脚本文件,这些文件可以是 ActionScript、Flash Communication或Flash JavaScript文件。 1.3.3 动作面板和脚本窗口的工具介绍? 在动作面板和脚本窗口的上侧都有一排功能按钮,利用这些功能按钮可以 很方面的进行ActionScript代码的输入和编写,下面对这些按钮进行具体 的说明。 :将新项目添加到脚本中按钮,该按钮主要用于显示语言元素,这些元素 同时也会显示在“动作”工具箱中。可以利用它来选择要添加到脚本中的 项目或者元素名称。 :查找按钮,主要用于查找并替换脚本中的文本。 :插入目标路径按钮(仅限动作面板),可以帮助为脚本中的某个动作设 置绝对或相对目标路径。 :语法检查按钮,用于检查当前脚本中的语法错误。 :自动套用格式按钮,用来调整脚本的格式以实现正确的编码语法和更好 的可读性。 :显示代码提示按钮:用于在关闭了自动代码提示时,可使用此按钮来显 示正在吃力的代码行的代码提示。 :调试选项按钮(仅限动作面板),用于设置和删除断点,以便在调试时 可以逐行执行脚本中的每一行。?? ? ? ? ? ? 1.3.3 动作面板和脚本窗口的工具介绍:折叠成对大括号按钮,用于对出现在当前包含插入点的成对大括号或小括号 间的代码进行折叠。 ? :折叠所选按钮:用于折叠当前所选的代码块。 ? :展开全部按钮:用于展开当前脚本中所有折叠的代码。 ? :应用块注释按钮,用于将注释标记添加到所选代码块的开头和结尾。 ? :应用行注释按钮,用于在插入点处或所选多行代码中每一行的开头处 添加单行注释标记。 ? :删除注释按钮,用于从当前行或当前选择内容的所有行中删除注释标记。 ? :显示/隐藏工具箱按钮,用于显示或隐藏“动作”工具箱。 ? :脚本助手按钮(仅限动作面板),其用于打开和关闭“脚本助手”模式。 ? :帮助按钮,用于显示“脚本”窗格中所选 ActionScript 元素的参考信 息。 ? :面板菜单 (仅限动作面板),包含适用于动作面板的命令和首选参数。 1.4 ActionScript 3.0的首选参数设置? ? ? ? 无论是在动作面板还是脚本窗口中编辑ActionScript代码,都可以通过设 置首先参数来配置输入的ActionScript代码的格式。 要设置ActionScript 3.0的首选参数,需要先打开首选参数窗口。请执行 下面的操作:选择【编辑】|【首选参数】,打开首选参数对话框, 1. 工具提示样式的代码提示 2.使用菜单样式的代码提示 1.5 面向对象编程概述? ActionScript 3.0是为面向对象编程而准备的一种脚本语 言。本节将简单介绍一下面向对象编程的基本概念。 ? 面向对象编程,英文为:Object Oriented Programming, 简写为OOP,意思为面向对象程序设计,它是一种计算机编 程架构。 ? 程序(program)是为实现特定目标或者解决特定问题而用 计算机语言编写的命令序列的集合。它可以是一些高级程 序语言开发出来的可以运行的可执行文件,也可以是一些 应用软件制作出的可执行文件,比如Flash编译之后的SWF 文件。 ? 编程是指为了实现某种目的或需求,使用各种不同的程序 语言进行设计,编写能够实现这些需求的可执行文件。 1.6 Flash CS3的第一个“Welcome You”? Flash CS3中有两种写入ActionScript 3.0代码的方法: ? 一种是在时间轴的关键帧加入ActionScript代码。 ? 另一种是在外部写出呢个单独的ActionScript类文件,然 后在绑定或者导入到fla文件中来。 ? ActionScript中的类有三种用法:一是和Flash中的库元件 进行绑定;二是和fla文件绑定;三是使用import关键字导 入类。 ? ActionScript3.0开发的程序,推荐文档与代码分离,不推 荐把代码写在关键帧上。下面用两种方法来开始第一个 “Welcome You”程序。 ? 1.在关键帧上加入代码 ? 2.利用文档类制造第一个“Welcome You”程序 第2章 AS3.0编程语言基础? 语法、数据、变量、运算符和语句构成了编程语 言的基础。本章将通过大量的测试代码。详细的 介绍ActionScript 3.0中的语法、数据类型,变 量以及运算符。通过本章的学习,为以后的面向 对象编程将打下一个坚实的基础。 2.1 AS3.0语法? 任何一门编程语言在编写代码时都必须遵循一定 的规则,这个规则就是语法。本节将着重介绍从 ActionScript 2.0开始使用的点语法和区分大小 写,了解编程常用的标点符号的使用,以及程序 注释的使用方法。 2.1.1 点语法? Flash中使用点(.)运算符来访问对象的属性和 方法,点运算符主要用于下面的几个方面。 ? 1.可以采用对象后面跟点运算符的属性名称(方 法)名称来引用对象的属性(方法)。 ? 2.可以采用点运算符表示包路径。 ? 3.可以使用点运算符描述显示对象的路径。 2.1.2 标点符号使用? 在Flash中有多种标点符号都很常用,分别为:分号(;)、逗号(,)、冒号(:)、 小括号(())、中括号([])和大括号({})。这些标点符号在Flash中都有各自不 同的作用,可以帮助定义数据类型,终止语句或者构建ActionScript代码块。 1.分号(;):ActionScript语句用分号(;)字符表示语句结束。 2.逗号(,):逗号的作用主要用于分割参数,比如函数的参数,方法的参数等等。 3.冒号(:):冒号的作用主要用于为变量指定数据类型。要为一个变量指明数据类 型,需要使用var关键字和后冒号法为其指定。 4.小括号(()):小括号在ActionScript3.0中有三种用途。 首先,在数学运算方面,可以用来改变表达式的运算顺序。小括号内的数学表达式优 先运算。 其次,在表达式运算方面,可以结合使用小括号和逗号运算符,来优先计算一系列表 达式的结果并返回最后一个表达式的结果。 5.中括号([]):中括号主要用于数组的定义和访问, . 6.大括号({}):大括号主要用于编程语言程序控制,函数和类中。 . 在构成控制结构的每个语句前后添加大括号(例如if..else 或for),即使该控制结 构只包含一个语句。? ? ? ? ? ? ? ? ? 2.1.3 注释? 注释是使用一些简单易懂的语言对代码进行简单 的解释的方法。注释语句在编译过程中并不会进 行求值运算。可以用注释来描述代码的作用,或 者返回到文档中的数据。注释也可以帮助记忆编 程的原理,并有助于其他人的阅读。若代码中有 些内容阅读起来含义大不明显,应该对其添加注 释。 ? ActionScript3.0中的注释语句有两种:单行注释 和多行注释。 ? 单行注释以两个单斜杠(//)开始,之后的该行 内容均为注释。比如下面的代码: ? trace(&1234&)//输出:1234 2.1.4 关键字和保留字? 保留字,从字面上就很容易知道这是保留给 ActionScript 3.0语言使用的英文单词。因而不 能使用这些单词作为变量、实例、类名称等。如 果在代码中使用了这些单词,编译器会报错。 ? ActionScript3.0中的保留字分为3类:词汇关键 字、语法关键字和供将来使用的保留字。 ? 1.词汇关键字 ? 2.句法关键字 ? 3.供将来使用的保留字。 2.2 变量和常量? 变量和常量,都是为了储存数据而创建的。变量 和常量就像是一个容器,用于容纳各种不同类型 的数据。当然对变量进行操作,变量的数据就会 发生改变,而常量则不会。 ? 变量必须要先声明后使用,否则编译器就会报错。 道理很简单,比如现在要去喝水,那么你首先要 有一个杯子,否则怎么样去装水呢?要声明变量 的原因与此相同。 2.2.1 声明变量的语法? 在ActionScript 3.0中,使用var关键字来声明变 量。格式如下所示。 ? var 变量名:数据类型; ? var 变量名:数据类型=值; ? 变量名加冒号加数据类型就是声明的变量的基本 格式。要声明一个初始值,需要加上一个等号并 在其后输入响应的值。但值的类型必须要和前面 的数据类型一致。 2.2.2 变量的命名规则? 变量的命名既是任意的,又是有规则,有目的的。随手牵 来、杂乱无章的命名在Flash里面容易引起代码的混乱,也 不容易进行维护操作。 ? 变量的命名首先要遵循下面的几条原则: ? 它必须是一个标识符。它的第一个字符必须是字母、下划 线(_)或美元记号($)。其后的字符必须是字母、数字、 下划线或美元记号。注意:不能使用数字作为变量名称的 第一个字母。 ? 它不能是关键字或动作脚本文本,例如true、false、null 或undefined。特别不能使用ActionScript的保留字,否则 编译器会报错。 ? 它在其范围内必须是惟一的,不能重复定义变量。 2.2.3 变量的作用域? 变量的作用域指可以使用或者引用该变量的范围,通常变 量按照其作用域的不同可以分为全局变量和局部变量。全 局变量指在函数或者类之外定义的变量,而在类或者函数 之内定义的变量为局部变量。 ? 全局变量在代码的任何地方都可以访问,所以在函数之外 声明的变量同样可以访问,如下面的代码,函数Test()外 声明的变量i在函数体内同样可以访问。 ? var i:int=1; ? //定义Test函数 ? function Test() { ? trace(i); ? } ? Test()//输出:1 2.2.4 变量的默认值? 变量的默认值是指变量在没有赋值之前的值。对于 ActionScript3.0的数据类型来说,都有各自的默认值,下 面使用代码来测试一下: ? 通过上面的代码输出,已经可以得到这些数据类型变量的 默认值,分别为: ? Boolean型变量的默认值是:false。 ? int型变量的默认值是:0。 ? Number型变量的默认值是:NaN。 ? Object型变量的默认值是:null。 ? String型变量的默认值是:null。 ? uint型变量的默认值是:0。 ? *型变量的默认值是:undefined。 2.2.5 使用const声明常量? Action Script 3.0中增加了一个const关键字, 用于声明常量。常量是指具有无法改变的固定值 的属性。比如Math.PI就是一个常量。常量可以看 做一种特殊的变量,不过这种变量不能赋值,不 能更改而已。 ? 使用用const声明常量的语法格式和var声明的变 量的格式一样: ? const 常量名:数据类型; ? const 常量名:数据类型=值; ? 下面声明常量的代码: ? const g:Number=9.8; 2.3 基础数据类型? ? ? ? ? 和其它的面向对象的编程的数据类型一样,ActionScript3.0的数 据类型同样分为两种,具体划分方式如下所示。 基元型数据类型:Boolean、int、Number、String和uint。 复杂型数据类型:Array、Date、Error、Function、RegExp、XML 和XMLList。 一般来说,基元值的处理速度通常比复杂值的处理速度要快。 基元型数据和复杂型数据类型的最大的区别是:基元型是值对类 型数据,而复杂型是引用类型数据。值对类型直接储存数据,使 用它为另一个的变量赋值之后,若另一个变量改变,并不影响原 变量的值。引用类型指向要操作的对象,另一个变量引用这个变 量之后,若另一变量发生改变,原有的变量跟着也要发生改变。 基元型数据类型都是值对类型数据,复杂型数据都是引用类型数 据。 另外,最明显的一个区别是,如果数据类型能够使用new关键字创 建,那么它一定是引用型数据变量。? ? 2.3.1 基础数据类型说明? 本节通过大量的测试代码,来说明各种不同的数 据类型的用法和使用中的注意事项。 ? 1.Boolean 数据类型 ? 2.数字:int、uint和Number ? 3.String 数据类型 ? 4.Array数组类型 ? 5.Object数据类型 ? 6.Object数据类型 2.3.2 数据类型检查? 任何编程代码在执行前或者执行时都要执行数据类型的检 查,以避免出现数据错误。ActionScript 3.0是动态类型 的语言,它默认的是执行时进行数据类型检查。同时它也 在适合使用“严格模式”的编译器在编译时执行数据类型 检查。在使用严格模式的编译器中,数据类型检查既可以 在执行前执行编译器检查,也可以在运行时执行运行时检 查。在标准模式下,只支持默认的执行时数据类型检查。 ? 比如说在程序编写过程中,要明确传递变量值的类型和接 受参数类型相同。比如下面的代码: ? function func(mystr:String) { ? trace(mystr); ? } ? var str:String=&welcome you&; ? func(str); 2.3.3 隐式数据类型转换? 数据类型转换是指把某个值转换为其它类型的数据。类型 的转换有两种方式:隐式转换和显式转换。隐式转换又称 为强制转换,由Flash Player在运行时执行。比如将2赋值 给Boolean数据类型的变量,则Flash Player会先将2转换 为布尔值true,然后再将其赋值给该变量。 ? 隐式转换可以称为自动转换,是在程序编译的过程中由程 序本身来进行数据类型的转换。它主要发生在许多上下文 中。主要分为以下几种情况: ? 在赋值语句中。 ? 在将值作为函数的参数传递时。 ? 在从函数中返回值时。 ? 在使用某些运算符(如加法运算符(+))的表达式中。 2.3.4 显式数据类型转换? 显式转换是指代码若指示编译器将一个数据类型 的变量视为属于另一个类型的变量时执行该转换。 该转换主要利用数据类型的对象名称来转换。常 用的数据转换均为此方式。 ? 显示转换是利用数据类型的对象名称来转换,常 见的主要有下面的几种。 ? 1.转换为 int、uint 和 Number ? 2.转换为Boolean ? 3.转换为 String 2.3.5 无类型说明符? ActionScript 3.0引入了三种特殊类型的无类型说明符:*, void和null。 ? 使用*类型用于指定属性是无类型的。使用*作为类型注释 与不使用类型注释等效。从无类型属性中读取的表达式可 视为无类型表达式。该说明符主要用于两个方面:将数据 类型检查延缓到运行时和将undefined存储在属性中。 ? void用于说明定函数无法返回任何值。void类型只有一个 值:undefined。该说明符仅用于声明函数的返回类型。 ? null是一个没有值的特殊数据类型。Null数据类型只有一 个值:null。Null数据类型的不与任何类相关联。不可将 Null数据类型用作属性的类型注释。 2.4 运算符与表达式? 学习一门编程语言,首先要弄清楚的就是如何对 其中的数据进行运算。使用表达式来表达想要达 到的效果,使用运算符来进行相关的运算,这就 是数据运算的关键。本节主要介绍常用的运算符 的用法。 2.4.1 运算符和表达式基础知识? 运算符是可以通过给出的一个或者多个值来产生 另一个值的东西。可以说它是一种特殊的函数。 其中的值称为“操作数”,具体包括字面值、变 量和表达式。 ? 运算符分为三种:一元运算符、二元运算符、三 元运算符。一元运算符只运算一个值,例如递增 运算符++;二元运算符比较常见,ActionScript 3.0中大部分运算符都是二元运算符;三元运算符 具有三个操作数,例如条件运算符(?:)具有3个 操作数。 2.4.2 赋值运算符? 赋值运算符有两个操作数,它根据一个操作数的 值对另一个操作数进行赋值操作。ActionScript 中的赋值运算有12个,赋值运算符 运算符 = *= /= %= += -= &&= &&= &&&= &= ^= |= 赋值 乘法赋值 除法赋值 求模赋值 加法赋值 减法赋值 按位向左移位赋值 按位向右移位赋值 按位无符号向右移位赋值 按位&与&赋值 按位&异或&赋值 按位&或&赋值 执行的运算 2.4.3 算术运算符? 算术运算符共有6个,分别为:加、减、乘、除、 模运算和求反运算。 ? 加、减、乘、除的运算很简单,请看下面的代码 示例: ? var a:int=1; ? var b:int=2; ? var c:int=a+b; ? var d:int=a-b; ? var e:int=a*b; ? var f:int=a/b; 2.4.4 算术赋值运算符? 算术赋值运算符和算术运算符对应,共有5个,分 别为+=、-=、*=、/=和%=。和赋值运算符一样, 运算符的左边只能是变量。右侧是一个要值、变 量或表达式。 ? 这种类型的赋值运算符有时也叫做自赋值运算符, 就是利用自己进行运算并赋值给自己。比如下面 的代码语句: ? a+=1; ? 其要表达的运算过程就是下面的的代码要执行的 运算过程。 ? a=a+1; 2.4.5 关系运算符? 关系运算符用于比较两个操作数的值的大小关系。常见的 关系运算符一般分为两类:一类用于判断大小关系,一类 用于判断相等关系。其具体情况如下: ? 判断大小关系:&大于运算符、&小于运算符、&=大于等于 运算符、&=小于等于运算符。 ? 判断相等关系:==等于运算符、!=不等于运算符、===严 格等于运算符、!==严格不等于运算符。 ? 关系运算符左右两侧可以是数值、变量或者表达式。关系 表达式的结果是Boolean值,flase或者true。 ? 1.判断大小关系的运算符 ? 2.判断相等关系的运算符: 2.4.6 逻辑运算符? 逻辑运算符有3个,分别为:&&逻辑“与”运算符、 ||逻辑“或”运算符和!逻辑“非”运算符。逻辑 运算符常用于逻辑运算,运算的结果为Boolean型。 ? 逻辑与(&&)和逻辑或(||)运算表达式要求左 右两侧的表达式或者变量必须是Boolean型的值。 ? &&:左右两侧有一个为flase,结果都为flase; 只有两侧都为true,结果才为true。 ? ||:左右两侧有一个为true,结果都为true;只 有两侧都为false,结果才为false。 2.4.7 按位和按位赋值运算符? 按位运算符共有6个,分别为:&按位“与”、^按位“异或”、| 按位“或”、&&按位左移位、&&按位右移位、&&&按位无符号移位。 同样,按位赋值运算符也有6个,对照按位运算符分别为:&=按位 “与”赋值、^=按位“异或”赋值、|=按位“或”赋值、&&=按位 左移位赋值、&&=按位右移位赋值、&&&=按位无符号移位赋值。 按位操作需要把十进制的整数,转换为二进制的数,然后进行操 作。 按位与操作过程:按位与操作的规则为:1+1=1,1+0=0,0+1=0, 0+0=0。比如11&34,11转二进制数为转二进制数为 100010。现在按照位置从右向左第一位分别为1和0,所以取与后 仍为0,依次取与的最后结果为0010转为十进制数为2, 所以最后的输出结果为2。代码如下所示。 var a:int=11; var b:int=34; trace(a&b);//输出为:2? ?? ? ? 2.4.8 递加递减运算符? ++递加运算符和―递减运算符常用于循环计算过 程中,对循环中的变量进行递加或者递减操作。 比如i++,它等价于i=i+1。测试代码如下: ? var i:int=0 ? i++ ? trace(i)//输出:1 ? 同样,i―等价于i=i-1。测试代码如下: ? var i:int=5; ? i--; ? trace(i);//输出:4 2.4.9 三元条件运算符? ?:运算符是唯一的一个三元运算符,也就是说, 这个运算符有三个操作数。具体的语法格式如下: ? (条件表达式)?(表达式1):(表达式2) ? 格式说明如下: ? 条件表达式:判断表达式,通过逻辑判断,得到 一个Boolean型的结果。 ? 表达式1:判断表达式的结果为true,执行该语句。 ? 表达式2:判断表达式的结果为false,执行该语 句。 2.4.10 其它运算符? 在ActionScript3.0中还有几个常见的运算符,如:typeof、 is、as。下面对这几个运算符进行简单的说明: ? 1.typeof运算符:typeof用于测试对象的的类型,使用的 方法如下: ? typeof(对象); ? 2.is运算符:is运算符用于判断一个对象是不是属于一种 数据类型,返回Boolean型变量。如果对象属于同一类型, 则返回true,否则返回false。 ? 3.as运算符:as运算符和is运算符的使用格式相同,但是 返回的值不同。如果对象的类型相同,返回对象的值;若 不同,则返回null。 2.4.11 运算符的优先级? 运算符的优先级顺序决定了一个表达式运算顺序。就像数学中的乘除运算要优于加减 运算一样,ActionScript 3.0 中的各运算符之间也有一个优先运算的顺序。具体请 参照表所示。运算符优先顺序表 组 主要 后缀 一元 乘法 加法 按位移位 关系 等于 按位&与& 按位&异或& 按位&或& 逻辑&与& 逻辑&或& 条件 赋值 逗号 运算符 [] {x:y} () f(x) new x.y x[y] &&&/& @ :: .. x++ x-++x --x + - ~ ! delete typeof void */% +&& && &&& & & &= &= as in instanceof is == != === !== & ^ | && || ?: = *= /= %= += -= &&= &&= &&&= &= ^= |= , 第3章 AS3.0程序设计? 任何一门编程语言都要设计程序问题, ActionScript 3.0也不例外。在本章中,将介绍 ActionScript3.0系统的基本语句以及程序设计的 一般过程。首先介绍一下程序控制的逻辑运算, 然后着重介绍条件语句和循环语句。 3.1 逻辑运算? 在程序设计的过程中,要实现程序设计的目的,必须进行逻辑运算。只有 进行逻辑运算,才能控制程序不断向最终要达到的目的前进,知道最后实 现目标。 逻辑运算又称为布尔运算,通常用来测试真假值。逻辑运算主要使用条件 表达式进行判断,如果符合条件,则返回结果true,不符合条件,返回结 果false。 条件表达式中最常见的形式就是利 用关系运算符进行操作数比较,进而 得到判断条件。 当然,有的情况下需要控制的条件比较多,那么就需要使用逻辑表达式进 行逻辑运算,得到一个的组合条件,并控制最后的输出结果。 常见的条件表达式举例如下: (a&0):表示判断条件为a&0。若是,返回true;否则返回false。 (a==b)&&(a&0):表示判断条件为a大于0,并且a与b相等。若是,返 回true,否则返回false。 (a==b)||(a&0):表示判断条件为a大于0,或者a与b相等。若是,返 回true,否则返回false。?? ? ? ? ? ? 3.2 程序的三种结构? 在程序设计的过程中,如果控制程序,如何安排 每句代码执行的先后次序,这个先后执行的次序, 称之为“结构”。常见的程序结构有三种:顺序 结构、选择结构和循环结构。本节将逐个介绍一 下这三种程序结构的概念和流程。 3.2.1 顺序结构? 顺序结构最简单,就是按照代码的顺序,一句一 句的执行操作,结构如图3-1所示。 ? ActionScript代码中的简单语句都是按照顺序进 行处理,这就是顺序结构。请看下面的示例代码。 ? //执行的第一句代码,初始化一个变量 ? var a: ? //执行第二句代码,给变量a赋值数值1 ? a=1; ? //执行第三句代码,变量a执行递加操作 ? a++; 3.2.2 选择结构? 当程序有多种可能的选择时,就要使用选择结构。 选择那一个,要根据条件表达式的计算结果而定。 结构如图所示。 3.2.3 循环结构? 循环结构就是多次执行同一组代码,重复的次数 由一个数值或条件来决定。结构如图所示。 3.3 选择程序结构? 选择程序结构就是利用不同的条件去执行不同的 语句或者代码。ActionScript 3.0有三个可用来 控制程序流的基本条件语句。其分别为if..else 条件语句、if..else if条件语句、switch条件语 句。本节将详细讲解这三种不同的选择程序结构。 3.3.1 if..else 条件语句? if..else条件语句判断一个控制条件,如果该条 件能够成立,则执行一个代码块,否则执行另一 个代码块。 ? if..else条件语句基本格式如下: ? if(表达式){ ? 语句1 ? } ? else ? { ? 语句2; ? } 3.3.2 if..else if..else语句? if..else条件语句执行的操作最多只有两种选择, 要是有更多的选择,那就可以使用if..else if..else条件语句。 3.3.3 Switch语句? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Switch语句相等于一系列的if..else if..语句,但是要比if语句 要清晰的多。switch 语句不是对条件进行测试以获得布尔值,而 是对表达式进行求值并使用计算结果来确定要执行的代码块。 Switch语句格式如下: switch (表达式) { case: 程序语句1; case: 程序语句2; case: 程序语句3; default: 默认执行程序语句; } 3.4 循环程序结构? 在现实生活中有很多规律性的操作,作为程序来说就是要 重复执行某些代码。其中重复执行的代码称为循环体,能 否重复操作,取决于循环的控制条件。循环语句可以认为 是由循环体和控制条件两部分组成。 ? 循环程序结构的结构一般认为有两种: ? 一种先进行条件判断,若条件成立,执行循环体代码,执 行完之后再进行条件判断,条件成立继续,否则退出循环。 若第一次条件就不满足,则一次也不执行,直接退出。 ? 另一种是先执行依次操作,不管条件,执行完成之后进行 条件判断,若条件成立,循环继续,否则退出循环。 3.4.1 for循环语句? ? ? ? ? ? ? ? ? for循环语句是ActionScript编程语言中最灵活、应用最为广泛的 语句。for循环语句语法格式如下: for(初始化;循环条件;步进语句) { 循环执行的语句; } 格式说明如下: 初始化:把程序循环体中需要使用的变量进行初始化。注意要使 用var关键字来定义变量,否则编译时会报错。 循环条件:逻辑运算表达式,运算的结果决定循环的进程。若为 flase,退出循环,否则继续执行循环代码。 步进语句:算术表达式,用于改变循环变量的值。通常为使用++ (递增)或--(递减)运算符的赋值表达式。 循环执行的语句:循环体,通过不断改变变量的值,已达到需要 实现的目标。 3.4.2 while循环语句? while循环语句是典型的“当型循环”语句,意思是当满足 条件时,执行循环体的内容。while循环语句语法格式如下: ? while(循环条件) { ? 循环执行的语句 ? } ? 格式说明如下: ? 循环条件:逻辑运算表达式,运算的结果决定循环的进程。 若为true,继续执行循环代码,否则退出循环。 ? 循环执行的语句:循环体,其中包括变量改变赋值表达式, 执行语句并实现变量赋值。 3.4.3 do..while循环语句? do…while循环是另一一种while循环,它保证至 少执行一次循环代码,这是因为其是在执行代码 块后才会检查循环条件。do…while循环语句语法 格式如下: ? do { ? 循环执行的语句 ? } while (循环条件) ? 循环执行的语句:循环体,其中包括变量改变赋 值表达式,执行语句并实现变量赋值。 ? 循环条件:逻辑运算表达式,运算的结果决定循 环的进程。若为true,继续执行循环代码,否则 退出循环。 3.4.4 for..in和for each..in语句? for..in和for each..in语句都可以用于循环访问对象属性 或数组元素。下面分别使用两种语句来访问对象中的属性。 代码如下所示。 ? //定义一个对象lzxt,并添加属性name和age ? var lzxt:Object = {name:&浪子啸天&, age:30}; ? //执行遍历操作 ? for (var i:String in lzxt) { ? //输出属性名称和属性值 ? trace(&for in 语句输出:&+i + &: & + lzxt[i]); ? } ? //执行for each遍历操作 ? for each (var k:String in lzxt) { ? //输出属性值 ? trace(&for each 语句输出:&+k); ? } 3.4.5 循环的嵌套? 嵌套循环语句,就是在一个循环的循环体中存在 另一个循环体,如此重复下去直到循环结束为止, 即为循环中的循环。以for循环为例,格式如下所 示。 ? for (初始化; 循环条件; 步进语句) { ? for (初始化; 循环条件; 步进语句) { ? 循环执行的语句; ? } ? } 3.4.6 循环流程控制语句? 在ActionScript 3.0中可以使用break和continue来控制循 环流程。break语句的结果是直接跳出循环,不再执行后面 的语句;continue语句的结果是停止当前这一轮的循环, 直接跳到下一轮的循环,而当前轮次中continue后面的语 句也不再执行。 ? 下面的两个例子分别执行循环变量从0递增到10的过程,如 果i等于4,分别执行break和continue语句,看发生的情况。 代码如下所示。 ? //使用break控制循环 ? for (var i:int=0; i&10; i++) { ? if (i==3) { ? ? } ? trace(&当前数字是:&+i); ? } 第4章 函数? 函数在程序设计的过程中,是一个革命性的创新。 利用函数编程,可以避免冗长、杂乱的代码;利 用函数编程,可以重复利用代码,提高程序效率; 利用函数编程,可以便利的修改程序,提高编程 效率。 ? 函数(Function)的准确的定义为:执行特定任务, 并可以在程序中重用的代码块。ActionScript 3.0中有两类函数:“方法”和“函数闭包”。具 体是将函数称为方法还是函数闭包,取决于定义 函数的上下文。 4.1 定义函数? 在ActionScript 3.0中有两种定义函数的方法: 一种是常用的函数语句定义法;一种是 ActionScript中独有的函数表达式定义法。具体 使用哪一种方法来定义,要根据编程习惯来选择。 一般的编程人员使用函数语句定义法,对于有特 殊需求的编程人员,则使用函数表达式定义法。 4.1.1 函数语句定义法? ? ? ? ? ? ? ? ? ? 函数语句定义法是程序语言中基本类似的定义方法,使用function关键字 来定义,其格式如下所示。 function 函数名(参数1:参数类型,参数2:参数类型…):返回类型{ //函数体 } 代码格式说明: function:定义函数使用的关键字。注意function关键字要以小写字母开 头。 函数名:定义函数的名称。函数名要符合变量命名的规则,最好给函数取 一个与其功能一致的名字。 小括号:定义函数的必需的格式,小括号内的参数和参数类型都可选。 返回类型:定义函数的返回类型,也是可选的,要设置返回类型,冒号和 返回类型必须成对出现,而且返回类型必须是存在的类型。 大括号:定义函数的必需格式,需要成对出现。括起来的是函数定义的程 序内容,是调用函数时执行的代码。 4.1.2 函数表达式定义法? ? ? ? ? ? ? ? ? ? ? ? ? 函数表达式定义法有时也称为函数字面值或匿名函数。这是一种较为繁杂 的方法,在早期的ActionScript版本中广为使用。其格式如下所示。 var 函数名:Function=function(参数1:参数类型,参数2:参数类型…):返 回类型{ //函数体 } 代码格式说明: var:定义函数名的关键字,var关键字要以小写字母开头。 函数名:定义的函数名称。 Function:指示定义数据类型是Function类。注意Function为数据类型, 需大写字母开头。 =:赋值运算符,把匿名函数赋值给定义的函数名。 function:定义函数的关键字,指明定义的是函数 小括号:定义函数的必需的格式,小括号内的参数和参数类型都可选。 返回类型:定义函数的返回类型,可选参数。 大括号:其中为函数要执行的代码。 4.1.3 两种定义方法的区别和选择? 原则上,推荐使用使用函数语句定义法。因为这种方法更 加简洁,更有助于保持严格模式和标准模式的一致性的。 ? 下面要讲解的是函数语句和函数表达式定义法之间存在的 区别,具体内容如下所示。 ? 1.两种方法区别 ? 2.两种方法的选择 ? 在两种定义方法的选择上,一般使用函数语句定义法。函 数表达式定义函数主要用于:一是适合关注运行时行为或 动态行为的编程,二是用于那些使用一次后便丢弃的函数 或者向原型属性附加的函数。函数表达式更多地用在动态 编程或标准模式编程中。 4.2 调用函数? 函数只是一个编好的程序块,在没有被调用之前, 什么也不会发生。只有通过调用函数,函数的功 能才能够实现,才能体现出函数的高效率。通过 本节的学习,读者将掌握一般的函数调用方法以 及嵌套和递归调用函数的方法。 4.2.1 函数的一般调用? 对于没有参数的函数,可以直接使用该函数的名 字,并后跟一个圆括号(它被称为“函数调用运算 符”)来调用。 ? 下面定义一个不带参数的函数HelloAS(),并在定 义之后直接调用,其代码如下。 ? function HelloAS() { ? trace(&AS3.0世界欢迎你!&); ? } ? HelloAS(); ? 代码运行后的输出结果,如下所示。 ? /输出:AS3.0世界欢迎你! 4.2.2 嵌套和递归调用函数? 嵌套和递归调用是两种类似函数调用方式,其本 质都是在调用函数时用一个函数就调用另一个函 数。不同的是,嵌套调用是用一个函数去调用另 一个函数,而递归调用是函数调用自身函数。 ? 1.嵌套调用函数 ? 2.递归调用函数 4.3 函数的返回值? 主调函数通过函数的调用得到一个确定的值,此 值被称为函数的返回值。利用函数的返回值,可 以通过函数进行数据的处理、分析和转换,并能 最终获取想要获得的结果。在本节我们主要学习 函数返回值的获取方法和获取过程中的注意事项。 4.3.1 return语句? AS从函数中获取返回值,使用return语句来实现,语法格 式如下: ? return 返回值 ? return:函数返回值的关键字,必须的。 ? 返回值:函数中返回的数据,既可以是字符串、数值等, 也可以是对象,如数组、影片简介等。 ? 下面定义一个求圆形面积的函数,并返回圆面积的值,其 代码如下: ? function 圆面积(r:Number):Number{ ? var s:Number=Math.PI*r*r ? return s ? } ? trace(圆面积(5)) 4.3.2 返回值类型? 函数的返回类型在函数的定义中属于可选参数,如果没有 选择,那么返回值的类型由return语句中返回值的数据类 型来决定。 ? 下面的代码,return语句返回一个字符型数据,来验证一 下返回值的类型。 ? function 类型测试() { ? var a:String=&这是一个字符串&; ? ? } ? trace(typeof(类型测试())); ? 代码运行后的输出结果,如下所示。 ? string 4.4 函数的参数? 函数通过参数向函数体传递数据和信息。 ActionScript 3.0对函数的参数增加了一些新功 能,同时也增加了一些限制。有大多数程序员都 熟悉的按值或按引用传递参数这一概念,也有对 很多人很陌生的arguments对象和...(rest)参数。 4.4.1 传递参数的语法? 函数中传递的参数都位于函数格式的括号中,语法格式如 下: ? (参数1:参数类型=默认值,参数2:参数类型=默认值) ? 下面定义一个个性化的欢迎语句,对不同的姓名给出对应 的问候。代码如下所示。 ? function Welcome(username:String):void { ? trace(&欢迎你!&+username); ? } ? Welcome(&张三&); ? Welcome(&小明&); ? 代码运行后的输出结果,如下所示。 ? 欢迎你!张三 ? 欢迎你!小明 4.4.2 传递参数的的两种方法? 许多编程语言中,参数的传递基本都是两种类型:按值或 者按引用传递。按值传递意味着将参数的值复制到局部变 量中以便在函数内使用。按引用传递意味着将只传递对参 数的引用,而不传递实际值。要了解任何一门编程语言中 的函数,首先必须搞清楚的问题就是参数的传递到底是按 值还是按引用来传递参数。 ? 在ActionScript 3.0 中,所有的参数均按引用传递,因为 所有的值都存储为对象。基元型数据是不变的对象,按按 值还是按引用的效果一样,通常可以看作是按值传递。按 值传递,就是指参数被传递给函数后,被传递的变量就独 立了。若在函数中改变这个变量,原变量不会发生任何的 变化。 4.4.3 给函数设置默认参数? 在ActionScript 2.0中并不支持对函数设置默认 参数,此为ActionScript 3.0的新功能。要给一 个函数的参数设置默认值,语法格式如下: ? function(参数1:参数类型=默认值,参数2:参数类 型=默认值) ? 默认参数是可选项,可以设置默认参数,也可以 不设置默认参数。若设置了默认参数,则在调用 函时,若果没有写明参数,系统将使用在函数定 义中为该参数指定的值。 4.4.4 arguments 对象和...(rest) 参数? ActionScript3.0中有两种函数调用时检查参数数量的方法, 分别为使用arguments对象和..(rest) 参数。 ? 1.arguments 对象 ? 在函数中,可以使用arguments 对象来访问有关传递给该 函数的参数的信息。arguments 对象是一个数组,其中按 顺序保存着传递给函数的所有参数。可以使用数组的访问 方式来访问传入的参数。它有一个length属性记录当前传 入的参数数目;还有一个属性callee提供对函数本身的引 用,该引用可用于递归调用函数表达式。 ? 2....(rest)参数 ...(rest)参数 ...(rest) ? ...(rest)参数是ActionScript3.0引入的新参数声明。使 用该参数可指定一个自己命名的数组参数来接受任意多个 以逗号分隔的参数。 第5章 事件的发送和处理? 事件处理系统是交互式程序设计的重要基础。利 用事件处理机制,可以方便的相应用户输入和系 统事件。ActionScript 3.0的事件机制基于文档 对象模型(DOM3),是业界标准的事件处理体系 结构。使用机制不仅方便,而且符合标准。 ActionScript 3.0全新的事件处理机制是 ActionScript编程语言中的重大改进,对 ActionScript程序设计人员来说,在使用上也更 加的方便和直观。 5.1 事件处理基础? 在本节将介绍事件和处理的基本概念,了解常见 的事件处理任务。对照ActionScript编程语言中 不同版本的事件处理机制的异同,明确 ActionScript 3.0中事件处理机制具有良好的性 能。 5.1.1 事件和事件处理基础知识? 事件和事件处理是面向对象编程的基础。本节将介绍事件 和事件处理的基础知识以及事件处理的方法和事件处理的 任务。 ? 1.事件和事件处理基本概念 ? 2.ActionScript 3.0中的事件和事件处理 ? 3.ActionScript 3.0中的事件处理任务 ? 在ActionScript 3.0编程过程中,常见的使用事件处理的 任务有: ? 编写代码以响应事件 ? 阻止代码响应事件 ? 处理事件对象 ? 处理事件流 ? 从类中调度事件 ? 创建自定义事件类型 5.1.2 早期 ActionScript 版本中的事件处理? ActionScript 1.0使用on()和onClipEvent()两个事件处理 函数来处理事件。具体为: ? on()事件处理函数,直接放在按钮或者影片剪辑实例上。 ? onClipEvent()处理函数,直接放在影片剪辑实例上。 ? 这种方法把代码直接夹在实例上,简单易于、方便直接, 但是由于分散在各个不同的元件之上,难以管理和维护。 特别是处理不是本人编写的代码,查看和找寻会浪费太多 的宝贵时间。 ? 在ActionScript2.0中对事件处理进行了改进,增加了一些 事件处理机制,具体为: ? 回调函数事件:onload、oninit、onComplete等。 ? 事件侦听器:addListener()、addEventListener()。 5.1.3 ActionScript 3.0中的事件处理? 在ActionScript 3.0引入了基于文档对象模型(DOM3)唯 一的一种事件处理模式,取代了以前各版本中存在的众多 的事件处理机制。在ActionScript3.0中值存在一种事件处 理模型,虽然会对一些老版本的用户和一些非开发者造成 一定的麻烦,但更加清晰,更加标准,更符合面向对象开 发的需要。 ? 对比ActionScript 2.0,ActionScript 3.0的事件处理体 系具有以下几个新特点: ? 在ActionScript 3.0中,只能使用addEventListener()注 册侦听器。 ? 在ActionScript 3.0中,可以对属于事件流一部分的任何 对象调用addEventListener()方法。 ? 在ActionScript 3.0中,只有函数或方法可以是事件侦听 器。 5.2 Event类? 在ActionScript 3.0的事件处理系统中,事件对 象主要有两个作用:一是将事件信息储存在一组 属性中,来代表具体事件;二是包含一组方法, 用于操作事件对象和影响事件处理系统的行为。 ? 在ActionScript 3.0中,在Flash播放器的应用程 序接口中,有一个Event类,作为所有事件对象的 基类,也就是说,程序中所发生的事件都必须是 Event类或者其子类的实例。 5.2.1 了解Event类属性? Event类公开的属性有:type、cancelable、target、 currentTarget、eventphase、bubles。 ? 1.type属性:每个事件对象都有关联的事件类型。事件类 型存储以字符串的形式存储在Event.type属性中。利用事 件类型,可以区分不同类型的事件。 ? 2.cancelable属性:事件的默认行为是否可以被阻止由布 尔值表示,并存储在Event.cancelable属性中。此属性时 一个布尔值,默认为flase。这个属性一般是和 preventDefault()方法结合在一起使用的。 ? 3.target属性:target属性用于存储对事件目标的引用。 ? 4.其它属性:currentTarget、eventphase和bubbles这三 个属性都是和ActionScript3的事件流机制有关,在平时用 到的不多。 5.2.2 了解Event类的方法? Event类的方法有7种:clone()、toString()、stopPropogation()、 stopImmediatePropogation()、preventDefault()、 isDefaultPrevented()和formatToString()。这些方法的用途如下: Event.clone()方法用于赋值Event子类实例,返回Event对象原始实例的 副本。当需要自定义Event子类时,就必须要继承Event.clone()方法,用 于赋值自定义类的属性。另外还要加上新的属性,否则在侦听器重写调用 时,这些属性的值会出现错误。 Event.toString()属性返回一个包含Event对象的所有属性的字符串。如 果要自定义事件类,那么重写toString()方法时,可以使用 formatToString()这个方法在返回的字符串中加入新的事件实例属性。 Event.stopPropogation()方法可阻止事件对象移动到下一个节点,但只 有在允许执行当前节点上的任何其它事件侦听器之后才起作用。 Event.stopImmediatePropogation()方法也阻止事件对象移动到下一个节 点,但不允许执行当前节点上的任何其它事件侦听器。 Event.preventDefault()和Event.isDefaultPrevented()和 Event.cancelable属性结合使用,用于取消事件的默认行为的发生。??? ? ? 5.2.3 Event类的子类? 对于很多事件来说,使用Event类的一组属性就已 经足够了。但是,Event类中的属性无法捕获其它 事件具有的独特的特性,比如鼠标的点击事件, 键盘的输入事件等。ActionScript 3.0的应用程 序接口特意为这些具有显特征的事件准备了Event 类的几个子类。这些子类主要包括: ? 鼠标类:MouseEvent。 ? 键盘类:KeyBoardEvent。 ? 时间类:TimerEvent。 ? 文本类:TextEvent。 5.3 事件侦听器? 事件侦听器也就是以前版本中的事件处理函数, 是事件的处理者,负责接受事件携带的信息,并 在接受到该事件之后执行事件处理函数体内的代 码。 ? 添加事件侦听的过程有两步:第一步是创建一个 事件侦听函数,第二步是使用addEventListener() 方法在事件目标或者任何的显示对象上注册侦听 器函数。 5.3.1 创建事件侦听器? 事件侦听器必须是函数类型,可以是一个自定义 的函数,也可以是实例的一个方法。创建侦听器 的语法格式如下: ? function 侦听器名称(evt:事件类型):void{…} ? 语法格式说明如下: ? 侦听器名称:要定义的事件侦听器的名称,命名 需符合变量命名规则。 ? evt:事件侦听器参数,必需。 ? 事件类型:Event类实例或其子类的实例。 ? void:返回值必须为空,不可省略。 5.3.2 管理事件侦听器? 在ActionScript3.0中使用IEventDispatcher接口的方法来 管理侦听器函数,主要用于注册、检查和删除事件侦听器。 ? 1.注册事件侦听器:addEventListener()函数用来注册事 件侦听函数。注册侦听器的语法格式如下: ? 事件发送者.addEventListener(事件类型,侦听器); ? 2.删除事件侦听器:removeEventListener()函数用来删除 事件侦听器函数。删除侦听器的语法格式如下: ? 事件发送者.removeEventListener(事件类型,侦听器); ? 3.检查事件侦听器:HasEventListener()方法和 willTragger()方法,都可以用来检测当前的事件发送者注 册了何种事件类型的侦听器。 ? 检查事件侦听器语法格式如下: ? 事件发送者.hasEventListener(事件类型); 5.4 事件处理类型? ActionScript3.0使用单一事件模式来管理事件, 所有的事件都位于flash.events包内,其中构建 了20多个Event类的子类,用来管理相关的事件类 型。在本节介绍常用的鼠标事(MouseEvent)件 类型、键盘事件(KeyboardEvent)类型和事件事 件(TimerEvent)类型和帧循环(ENTER_FRAME) 事件。 5.4.1 鼠标事件? 在ActionScript3.0之前的语言版本中,常常使用on(press)或者 onClipEvent(mousedown)等方法来处理鼠标事件。而在 ActionScript3.0中,统一使用MouseEvent类来管理鼠标事件。在 使用过程中,无论是按钮还是影片事件,统一使用 addEventListener注册鼠标事件。此外,若在类中定义鼠标事件, 则需要先引入(import)flash.events.MouseEvent类。 MouseEvent类定义了10中常见的鼠标事件,具体如下: CLICK:定义鼠标单击事件 DOUBLE_CLICK:定义鼠标双击双击事 件 MOUSE_DOWN:定义鼠标按下事件 MOUSE_MOVE:定义鼠标移动事 件 MOUSE_OUT:定义鼠标移出事件 MOUSE_OVER:定义鼠标移过事件 MOUSE_UP:定义鼠标提起事件 MOUSE_WHEEL:定鼠标滚轴滚动触 发事件 ROLL_OUT:定义鼠标滑入事件 ROLL_OVER:定义鼠标滑出事件? ? ? ? ? ? 5.4.2 键盘事件? 键盘操作也是Flash用户交互操作的重要事件。在 ActionScript 3.0中使用KeyboardEvent类来处理 键盘操作事件。它有两种类型的键盘事件: KeyboardEvent.KEY_DOWN 和 KeyboardEvent.KEY_UP。 ? KeyboardEvent.KEY_DOWN:定义按下键盘时事件 ? KeyboardEvent.KEY_UP:定义松开键盘时事件 ? 注意:在使用键盘事件时,要先获得它的焦点, 如果不想指定焦点,可以直接把stage作为侦听的 目标。 5.4.3 时间事件? 在ActionScript3.0中使用Timer类来取代 ActionScript之前版本中的setinterval()函数。 而执行对Timer类调用的事件进行管理的是 TimerEvent事件类。要注意的是,Timer类建立的 事件间隔要收到SWF文件的帧频和Flash Player的 工作环境(比如计算机的内存的大小)的影响, 会造成计算的不准确。 ? Timer类有两个事件,分别为: ? TimerEvent.TIMER:计时事件,按照设定的事件发 出。 ? TimerEvent.TIMER_COMPLETE:计时结束事件,当 计时结束时发出 5.4.4 帧循环ENTER_FRAME事件? 帧循环ENTER_FRAME事件是ActionScript 3.0中动 画编程的核心事件。该事件能够控制代码跟随 Flash的帧频播放,在每次刷新屏幕时改变显示对 象。 ? 使用该事件时,需要把该事件代码写入事件侦听 函数中,然后在每次刷新屏幕时,都会调用Event. ENTER_FRAME事件,从而实现动画效果。 第6章 面向对象编程基础? 面向对象的编程,其英文是“Object-Oriented Programming”,简写为OOP。它以对象为基本单元来进行 代码划分,组织程序代码。ActionScript3.0是一个完全标 准的面向对象编程语言。面向对象编程在Flash5已经开始 支持,可惜语法不是业界传统的编程语言格式,在Flash5 和Flash MX中编写面向对象的编程非常的不方便。 ActionScript2.0在面向对象的编程上有很大的进步,但是 由于其使用的并不完全符合标准,存在很多的问题。现在 ActionScript3.0的推出基本解决了ActionScript2.0中存 在的问题,并有了很多的改进,而且相对于其它的OOP语言, 其更简单易学。 6.1 面向对象编程技术概述? 面向对象编程中最重要也最难以理解的概念就是“对象”。 对象,指的是具有某种特定功能的程序代码。 ? 对象(Object)具体可以指一件事、一个实体、一个名词, 一个具有自己的特定标识的东西。比如汽车、人、房子、 桌子、植物、支票、雨衣等等都是对象。对象就是一种客 观存在,可能有时你觉得虚无飘渺,但是却的的确确存在 着。 ? 任何一个对象都有其属性。以人为例,人有身高、体重、 性别、血型、年龄等等,这些都反映了人作为一个社会存 在所共有的特性。把这些特性反映到编程语言中,这些特 性就是属性,用来反映某一个对象的共有特点。 6.2 类? 对象是抽象的概念,要想把抽象的对象变为具体 可用的实例,则必须使用类。使用类来存储对象 可保存的数据类型,及对象可表现的行为信息。 要在应用程序开发中使用对象,就必须要准备好 一个类,这个过程就好像制作好一个元件并把它 放在库中一样,随时可以拿出来使用。本节从类 的基本概念着手,逐步介绍类的定义方法和类的 使用方法。 6.2.1 类的概述? ? 类(Class)就是一群对象所共有的特性和行为。 早在ActionScript1.0中,程序员使用原型(Prototype)扩展的 方法,来创建继承或者将自定义的属性和方法添加到对象中来, 这是类在Flash中的初步应用。在ActionScript 2.0中,通过使用 class和extends 等关键字,正式添加了对类的支持。 ActionScript 3.0不但继续支持ActionScript 2.0中引入的关键 字,而且还添加了一些新功能,如通过protected和internal属性 增强了访问控制,通过final和override关键字增强了对继承的控 制。 下面来简单了解一下ActionScript3.0中类(Class)的构成。具 体的类结构及实现方法,请参见6.2.2节的内容。 包块和类(Class)的名称。 构造函数。 属性:包括实例属性和静态属性。 方法:包括实例方法和静态方法。? ? ? ? ? 6.2.2 创建自定义的类? ? ? 创建一个自定义类的操作步骤如下: (1)建立一个准备保存类文件的目录,即为一个包(package)。比如在 计算机中有个目录“F:\Test”。 (2)启动Adobe Flash CS3,新建一个ActionScript文件,文件名为要创 建的类的名字。比如要创建的类的名称为Sample,那么保存的文件名称也 要为Sample。注意一定要保存在刚才建立的目录中。 (3)在文件的开头写入package关键字和package包的路径。如:package Test{},其中Test就是保存类文件的目录名称。 (4)若需要引入其它的类,则需要在package后面的大括号后插入新行, 使用import语句加入其它类的包路径和名称。比如import flash.geom.point。若不需要,则此步骤可以省略。 (5)在新的一行写入class关键字和类的名字。如class Sample{}。 (6)在class后面的大括号内写入对类定义的内容,包括构造函数,属性 和方法。? ?? ? 6.2.3 创建类的实例? 类是为了使用而创建的,要使用创建好的类,必 须通过类的实例来访问。要创建类的实例,需要 执行下面的步骤: ? (1)使用import关键字导入所需的类文件。其用 法格式如下所示。 ? import 类路径.类名称; ? (2)使用new关键字加上类的构造函数。其用法 格式如下: ? var 类引用名称:类名称=new 类名称构造函数 (); 6.2.4 包块和类? 在ActionScript 3.0中,包路径是一个独立的模 块,单独用一个包块来包含类,不再作为类定义 的一部分。定义包块使用package关键字,其用法 格式如下所示。 ? package 包块路径{ ? //类体 ? } ? 用法示例代码: ? package com.lzxt.display{ ? //类体 ? } 6.2.5 包的导入? ? ? ? ? ? ? 在ActionScript 3.0中,要使用某一个类文件,就需要先导入这个类文件 所在的包,也就是要先指明要使用的类所在的位置。 通过情况下,包的导入有这样的三种情形: 1.明确知道要导入哪个包,直接导入单个的包 例如说要创建一个绘制对象,那么只需导入Display包中的Shape包即可。 代码如下所示。 import flash.display.S 2.不知道具体要导入的类,使用通配符导入整个包 例如需要一个文本的控制类,但是并不知道该类的具体名称,那么就可以 使用“*”通配符进行匹配,一次导入包内的所有类。具体使用代码如下 所示。 import flash.text.* 3.要使用同一包内的类文件,则无需导入 如果现在有多个类位于计算机中的同一个目录下,则这些类在互相使用的 时候,不需要导入,直接使用即可。? ? ? 6.2.6 构造函数? ? 构造函数是一个特殊的函数,其创建的目的是为了在创建对象的 同时初始化对象,即为对象中的变量赋初始值。 在ActionScript 3.0编程中,创建的类可以定义构造函数,也可 以不定义构造函数。如果没有在类中定义构造函数,那么编译时 编译器会自动生成一个默认的构造函数,这个默认的构造函数为 空。构造函数可以有参数,通过参数传递实现初始化对象操作。 下面的示例列出两种常用的构造函数代码: //空构造函数 public function Sample(){ } //有参数的构造函数 public function Sample(x:String){ //初始化对象属性 }? ? ? ? ? ? ? ? 6.2.7 声明和访问类的属性? 在编程语言中,使用属性来指明对象的特征和对象所包含的数据 信息以及信息的数据类型。在定义类的过程中,需要通过属性来 实现对象特征的描述和对象信息数据类型的说明。比如在创建一 个关于人的类的过程中,就需要说明人这一对象的“性别”特征, 需要说明人的“年龄”这一数据的数据类型是一个数字等等。本 节将介绍声明和访问类属性的方法。 在ActionScript 3.0的类体中,一般在class语句之后声明属性。 类的属性分两种情况:实例属性和静态属性。实例属性必须通过 创建该类的实例才能访问,而静态属性则不需要创建类实例就能 够访问。 声明实例属性的语法格式如下所示。 var 属性名称:属性类型; var 属性名称:属性类型=值; public var 属性名称:属性类型=值;?? ? ? ? 6.2.8 声明和访问类的方法? 在编程语言中,使用方法来构建对象的行为,即 用来表示对象可以完成的操作。在编程过程过程 中,通过对象的方法,告诉对象可以做什么事情, 怎么做。比如在创建一个关于人的类的过程中, 就需要知道人能够干什么事情,这就是人这一对 象的方法。比如人张口说话,举手等等行为,都 需要通过方法来表示。 ? 在ActionScript 3.0中,声明类实例方法的格式 和上面函数的格式类似,格式如下所示。 ? function 方法名称(参数…):返回类型{ ? //方法内容 ? } 6.2.9 类的使用? 在ActionScript 3.0中,创建好的类一般有3种使 用方法:作为文档类进行文档类绑定;作为库中 元件的类进行绑定;作为外部类使用import关键 字导入。下面结合实例具体的来说一下这3种用法。 ? 1.文档类 ? 文档类是ActionScript 3.0的新特色,该特色是 为实现代码与文档分离而设计的。 ? 2.与库文件绑定 ? 与fla文件库中的影片剪辑进行绑定,每个影片剪 辑只能绑定一个类。 ? 3.import导入类 6.2.10 包外类? 在ActionScript 3.0中,一个类文件中可以定义 多个类,但是包块内只能定义有一个类,此为主 类。主类的名称一定要和类文件的名称相同,这 个类是供外部使用的。在包块之外,还可以定义 多个类,这些类的名称和类文件的名称不同,而 且只能由当前类中的成员可以访问。这种类,有 些资料称其为包外类,有些资料称其为助手类。 在这里笔者使用包外类这一名称。 6.3 接口? 接口可以看作是一个对象之间相互联系的纽带,起一个桥 梁的作用。通过接口中方法声明的集合,能够使互不相干 的对象之间相互通信。 ? 接口和类存在着一些类似的地方,也由一定的区别。 ? 接口仅仅声明方法而不提供实现的方法,要实现方法,需 要在该接口的类中声明和实现。 ? 接口方法的实现无任何属性,但在接口类的定义中,实现 的方法必须为public。 ? 可通过extends语句由接口继承实现多个接口,也可以通过 implements语句由类继承实现。 ? 接口是一个定义类方法组的数据类型,可作为类型注释。 6.3.1 接口的定义? ? ? ? ? ? ? ? ? ? ? ? 定义接口的方法和定义类相似,不过需要使用interface关键字来 实现。 接口可以包含实例方法、静态方法、getter和setter方法。 接口也需要保存为as文件,文件名必须和接口名保持一致,完全 相同。 定义接口的语法格式如下所示。 package 包路径{ 访问控制 interface 接口名称{ function 实例方法名(参数:参数类型):返回类型; static function 静态方法名(参数:参数类型):返 回类型; function get 方法名():返回类型; function set 方法名(参数:参数类型): } } 6.3.2 在类中实现接口? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 接口只是负责定义一些方法,这些方法要实现,则必须使用接口类来完成。 接口类要使用implements关键字来实现。一个类可以实现多个接口,多个 接口之间使用“,”分开。同样一个接口可以由多个子类来继承。 下面的示例代码继承上一节中的Iperson接口,并创建子类Man。代码如下 所示。 package { //定义类Man,继承自接口IPerson public class Man implements IPerson { //定义类方法walk public function walk():void { trace(&男人走路有力量!!&); } //定义类方法say public function say():void { trace(&男人说话直截了当!&); } } } 6.4 继承? 继承(Inheritance)是面向对象技术的一个重要 的概念,也是面向对象技术的一个显著特点。继 承是指一个对象通过继承可以使用另一个对象的 属性和方法。准确的说,继承的类具有被继承类 的属性和方法。被继承的类,称为基类或者超类, 也可以称为父类;继承出来的类,称为扩展类或 者子类。 6.4.1 继承的定义? 类的继承要使用extends关键字来实现。其语法格式如下所 示。 ? package{ ? class 子类名称 extends 父类名称{ ? } ? } ? 下面的示例创建一个新类Man,它继承自Person类,这样 Man类就是子类,而Person类就是父类。用法示例代码如下: ? package{ ? class Man extends Person{ ? } ? } 6.4.2 属性和方法的继承? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 子类可以继承父类中的大部分的属性和方法,但是父类中使用“private”访问控制 符定义的属性和方法不能被继承。 下面的示例新建一个PC类作为父类,该类有两个实例属性name和age,有两个实例方 法walk()和say()。代码如下所示。 创建父类PC,代码如下所示。 package com.lzxt{ //构建类 public class PC { //构建属性 public var name:String=&浪子啸天&; public var age:int=30; //构建方法 public function walk():void { trace(&人可以走路!&); } public function say():void { trace(&欢迎你来到as3世界&); } } } 6.4.3 重写override? 通过继承父类,可以继承父类的属性和方法。但有些时候 指需要使用父类中方法名称,而需改变其内容时,就需要 利用重写来修改其方法内容。 ? 在ActionScript 3.0中,只能重写实例的方法,不能重写 实例属性。还有父类中方法的访问控制符为final的方法也 不能进行重写。 ? 下面在上节的子类Man中重写父类PC的方法walk(),代码如 下所示。 ? package com.lzxt{ ? //继承父类 ? public class Man extends PC { ? public override function walk():void { ? trace(&这是重写过的走路方法&); ? } ? } ? } 6.5 AS3.0命名空间? 在ActionScript3.0中引入了命名空间的概念,使 用命名空间,可以控制标识符的可见性,可以管 理各个属性和方法的可见性。不管命名空间是在 的内部还是外部,都可以应用于代码。 ActionScript 3.0中有4个访问控制符,分别为: public、private、internal和protected。这4个 访问控制符就是一种命名空间,同样,也可以定 义自己的命名空间。本节就来介绍一下自定义命 名空间和应用命名空间的方法。 6.5.1 命名空间的定义? 命名空间常见的情况有两种:一是将命名空间定义到一个 度类的as文件中,该命名空间能够使不同的包进行访问; 二是将命名空间定义在类体中,该命名空间仅在本类中进 行访问。 ? 1.将命名空间定义在一个独立的as文件中 ? 下面的示例定义一个lzxt命名空间,代码如下所示。 ? package{ ? //定义命名空间 ? public namespace lzxt = &/& ? } ? 说明:从上例可以看出,定义一个命名空间需要使用 namespace关键字。 ? 2.将命名空间定义在类体中 6.5.2 使用命名空间? ? ? ? ? ? ? ? ? ? ? ? 若在类体中定义命名空间,则可以像访问控制符一样的使用,在 定义的属性或者方法之前加上命名空间就ok了。如下面的代码: package { class SampleSpace { //定义命名空间 namespace lzxt lzxt var name:String=“浪子啸天” //使用自定义命名空间控制方法 lzxt function welcome():void { trace(&欢迎使用自定义命名空间&); } } } 第7章 AS3.0显示编程? ActionScript 3.0的显示功能有了很大的革新, 原有的显示结构发生了重大的改变。对于熟悉了 ActionScript以前版本中MovieClip影片剪辑控制 和使用的AS程序人员来说,这次革新将导致一个 新的学习过程。ActionScript 3.0显示编程的内 容主要是关于如何使用ActionScript来生成和控 制各种图形、动画等显示对象。显示对象通常指 的是显示在Flash Player舞台上的可视化的对象。 7.1 显示对象简介? 显示对象(Display Object),指的是可以在舞 台显示的一切对象,包括可以直接看得见的图形、 动画、视频、文字等,也包括一些看不见的显示 对象容器。在ActionScript 3.0中,任何的复杂 的图形都是由显示对象和显示对象的容器共同构 成。 7.1.1 AS3.0中显示对象的等级结构? 编译完成的SWF文件,以最根部的stage(舞台)为基础,展现出不同的显 示效果。利用ActionScript 3.0构建的Flash播放文件都有都有一个由显 示对象构成的层次结构,这个结构称为“显示列表”。这个显示列表按照 一定的等级和层次在舞台上显示出来,构成复杂的显示对象。 ActionScript 3.0 支持的显示对象的结构类似于“树状结构”,以舞台 为根,SWF文件为干,显示对象为枝叶。具体结构见图所示。? 7.1.2 显示对象的种类? 在ActionScript3.0中,所有的显示对象都属于同 一个类:DisplayObject类。所有的显示对象都是 其子类。本节将对显示对象的种类进行简单的介 绍,并且进行简要的分类。 ? 1.显示对象的具体种类 ? 2.显示对象分类 7.1.3 显示列表? 在前文中已经说到,ActionScript 3.0支持的显示对象的结构类 似于“树状结构”,这上面的所有的显示对象和容器,就构成了 显示列表。显示列表是ActionScript 3.0中的一个新概念。显示 列表就是一个显示对象的清单,只要在Flash Player中显示出来 的对象,都是该显示列表中的内容。 在ActionScript 3.0中,显示对象能否显示出来,取决于是否加 入了显示列表。如果加入了显示列表,该对象就会被显示出来; 否则,即使该对象已经被创建,也不能被显示出来。 ActionScript3.0显示列表进行了以下方面的改进,具有明显的优 点。 1.呈现方式更为有效且文件较小,有效的提高了性能。 2.改进的深度管理,使层级管理更加容易 3.完整遍历显示列表,使对象的访问更方便 4.列表外的显示对象,方便了显示对象的管理 5.更便于创建显示对象的子类,创建可视化对象更容易?? ? ? ? ? ? 7.2 显示对象的一些基本概念? 在舞台上看到的显示对象,都有它们各自的属性, 如位置、大小、透明度等等。这些属性都来自于 显示对象的基类DisplayObject,该类总结了大部 分显示对象的共有的特征和行为。特征对应于显 示对象的属性,行为对应于显示对象的方法。 ? 在ActionScript 3.0中,DisplayObject类共有25 个属性,6个方法和6个事件。下面将简单介绍一 些常用的属性和方法,对于复杂的应用,将在后 面的章节结合具体的实例讲解。 7.2.1 显示对象的常见属性? ? 显示对象的属性共有25个,本节将介绍常用的一些基本属性。 (1)横坐标x:显示对象注册点距离自己父级容器注册点之间的水平距离, 以象素为单位。如果父容器是舞台,那么就是自身注册点与舞台原点间的 水平距离。 (2)纵坐标y:显示对象注册点与父级容器注册点之间的竖直距离,以象 素为单位。若父容器为根对象root,则为自身注册点与舞台原点之间的竖 直距离。 (3)宽度width:显示对象最左边到最右边之间的距离,以象素为单位。 (4)高度height:显示对象最上边到最下边之间的距离,以象素为单位。 (5)横向缩放比例scaleX:一个比例值,0~1之间的数字。控制显示对 象的横向缩放比例。 (6)纵向缩放比例scaleY:一个比例值,0~1之间的数字。控制显示对 象的纵向缩放比例。 (7)鼠标横向横坐标mouseX:鼠标相对于当前显示对象注册点之间的水 平距离。 (8)鼠标横向纵坐标mouseY:鼠标相对于当前显示对象注册点之间的竖 直距离。?? ? ? ? ? ? 7.2.1 显示对象的常见属性? (9)顺时针旋转角度rotation:显示对象绕轴点顺时针旋转的角度。0~180度表示 顺时针旋转角度,0~-180度表示逆时针旋转角度。如果超过了这个范围,则自动减 去360的整数倍。 (10)透明度alpha:0~1之间的值,0表示完全透明,1表示完全不透明。 (11)可见性visible:Boolean值,用于控制显示对象是否可见。true表示将对象显 示,false表示不显示对象。但不管设置成何值,该显示对象始终位于显示对象列表 中。 (12)遮照mask:持有的引用是用来遮照的显示对象。 (13)显示对象名字name:通常生产显示对象时,会分配默认的名字。若有需要,可 以使用代码进行修改。 (14)父容器parent:在显示列表中每个显示对象都有其父容器。parent属性指向显 示对象的父容器,若显示对象不在父容器,则该属性为null。 (15)根对象root:返回SWF文件主类的实例。若显示对象不在父容器,则该属性为 null。 (16)舞台stage:该属性持有的引用指向该显示对象所在的舞台。每个Flash程序, 都有一个舞台。 除了以上的16个属性之外,DisplayObject对象还有9个属性,分别为:loaderInfo、 cacheASBitmap、filters、scale9Grid、blendMode、accessibilityProperties、 opaqueBackground、scrollRect和transform。这些属性在后面的章节中根据需要进 行讲解。? ?? ? ? ? ? ? 7.2.2 显示对象的方法? 显示对象的基本方法有6个,常用的方法如下: ? (1)getBounds()方法:返回一个矩形区域,该矩形定义 相对于显示对象所在坐标系的显示对象区域。 ? (2)getRect()方法:返回一个矩形区域,该矩形定义相 对于显示对象所在坐标系的显示对象区域,注意该区域不 包含形状上的笔触宽度。 ? (3)hitTestObject()方法:返回一个Boolean值,若为 true,表示两个对象重叠或相交,否则为不相交。 ? (4)hitTestPoint()方法:返回一个Boolean值,若为 true,表示该对象对应点重叠或相交,否则为不相交。 7.2.3 显示对象的事件? ? ? 显示对象的事件有6个,常见的如下: (1)added事件:将显示对象添加到显示列表中时会调度该时间。下面的两种方法会 触发此事件:将显示对象添加到容器、将显示对象添加到容器的某一层次。 (2)addedToStage事件:将显示对象直接添加到舞台显示列表或将包含显示对象的 子对象添加至舞台显示列表中时会调度该事件。下面的两种情况下会触发此事件:将 显示对象添加到容器、将显示对象添加到容器的某一层次。 (3)removed事件:要从显示列表中删除显示对象时会调度该事件。以下两种情况下 会生成此事件:将显示对象容器的某个显示对象删除、将显示对象容器中的某个层次 的显示对象删除。 (4)removedFromStage事件:要从显示列表中删除显示对象或者删除包含显示对象 的子对象时会调度该事件。以下两种情况下会生成此事件:将显示对象容器的某个显 示对象删除、将显示对象容器中的某个层次的显示对象删除。 (5)enterFrame事件:播放头进入新帧时调度该事件。若播放头不移动,或者只有 一帧,则会继续以帧频调度此事件。 (6)render事件:在显示器述评之前调度该事件。当使用render事件的显示对象进 入舞台时,或者显示对象存在于显示列表时才会触发该事件。要保证render事件在当 前帧触发,必须调用stage.invalidate()。??? ? 7.3 管理显示对象? 显示对象只有显示在屏幕之上,才能达到要实现 的效果。显示对象容器就是用来储存和显示显示 对象的对象。要实现在显示对象容器中显示对象, 就需要把显示对象加入到显示对象列表中。本节 主要介绍如何添加和删除显示对象,如何通过深 度管理对象以及如何访问显示对象。 7.3.1 容器的概念? 所有的显示对象都要放入显示对象容器中才能够 显示,为了方便区分,把显示对象容器简称为容 器。容器是可以嵌套的,容器中可以放置非容器 显示对象,也可以放置子容器对象。 ? 容器的主要功能有一下几点: ? 提供访问、添加、删除显示对象的功能。 ? 具有深度管理功能。 ? 其中深度管理也就是管理容器中子对象的叠放次 序。所谓的叠放次序,表示显示对象重叠时从前 到后的显示顺序。处于显示顺序最前面的完整显 示,后面的对象依次被前面的对象遮挡,甚至有 的不能显示出来。 7.3.2 添加显示对象? 在ActionScript 3.0中,要把一个对象显示在屏幕中,需要作两 步工作,一是创建显示对象,二是把显示对象添加到容器的显示 列表中。加入显示列表的方法有addChild()和addChildAt()。 要在ActionScript 3.0中创建一个显示对象,只需使用new关键字 加类的构造函数即可。只要是继承自DisplayObject类或者其子类 的的实例都可以添加到显示对象列表中,比如Sprite,MovieClip, TextField,或自定义类。用下列代码创建TextField(文本框) 的代码如下所示。 var mytext:TextField =newTextField( ); 上面已经使用代码建立了一个文本框实例,但是它并没有位于显 示列表中,也就是说它现在还没有显示在屏幕上。要把这个文本 框显示在屏幕中,必须使用容器类的addChild()或者addChildAt() 方法加入到显示列表中。 1.将显示对象直接添加到显示列表中 2.将显示对象添加到指定位置?? ?? ? 7.3.3 删除显示对象? 要移除位于显示对象列表中的显示对象,需要使 用容器类的removeChild()和removeChildAt()方 法。 ? 1.移除指定名称的显示对象 ? 要移除已经知道显示对象名称的显示对象,可以 使用显示对象类的removeChild()方法其用法格式 如下: ? 容器对象.removeChild(显示对象) ? 2.删除指定索引的显示对象要删除指定位置索引 的显示对象,可以使用显示对象类的 removeChildAt()方法。其用法格式如下所示。 ? 容器对象.removeChildAt(位置索引) 7.3.4 深度管理? 深度,也就是前文所说的位置索引,用于说明同一个容器 中同一级别的所有显示对象从前到后的叠放次序。 ? 在ActionScript 3.0中,使用了全新的深度管理体系和轻 巧的深度管理方法,使我们可以很方便和舒适的添加和访 问对象。此深度管理体系有两个重要的特点: ? 深度由各自的容器对象所管理。每一个容器都知道自己有 多少个子对象,这个数目记录在自己容器的numChildren属 性中。每一个对象在容器显示列表中的位置索引代表了其 深度值。每一个容器的深度范围为0~numChildren-1。 ? 添加显示对象会自己调整各个显示对象的深度,避免层次 冲突。比如某一个深度已经有了一个显示 7.3.5 访问显示对象? ? ? ? 要访问加入到容器中的显示对象,可以通过3种方法来实现:通过 深度访问、通过名字访问和通过全局坐标访问。 1.通过深度访问显示对象:通过深度来访问显示对象,要使用 getChildAt()方法。用法格式如下: 容器对象.getChildAt(深度) 2.通过名字访问显示对象:每一个显示对象都有一个名称,该名 称可以使用该显示对象的name属性进行访问和设置。在创建显示 对象的时候,可以指定显示对象的名字,也可以不指定显示对象 的名字。若没有指定,Flash Player会自动的分配给该显示对象 一个默认的名字,如:“instance1”“instance2”等。 3.通过坐标访问显示对象:在ActionScript 3.0中,可以通过坐 标来访问置于该坐标之上的所有显示对象。 getObjectsUnderPoint()方法的用法格式如下: 容器对象. getObjectsUnderPoint(点对象);?? 7.4 处理显示对象? 显示对象放在舞台之后,可以进行大量的操作, 比如改变对象的位置、透明度、颜色,可以使显 示对象旋转,也可以控制拖动显示对象。这些都 要通过DisplayObject类及其子类的属性和方法来 实现。本节通过一些实例,介绍使用这些属性和 方法控制显示对象发生变化的方法。 7.4.1 改变对象的位置? 要改变一个显示对象的位置,只用调整显示对象的横坐标x和纵坐 标y这两个属性就可以了。注意x和y属性始终是指显示对象相对于 其父显示对象坐标轴的(0,0)坐标的位置。 下面的实例在舞台创建一个显示对象圆和四个箭头对象。通过点 击四个箭头控制圆上下左右移动。使用文档类:SetXY,? 7.4.2 缩放显示对象? 若要缩放显示对象,可以采用两种方法来缩放显示对象的 大小:使用尺寸属性(width和height)或缩放属性 (scaleX和scaleY)。 ? width和height属性使显示对象的宽和高,它们以象素为单 位,可以通过指定新的宽度和高度值来缩放显示对象、 ? scaleX和scaleY属性是指显示对象的显示比例,是一个浮 点数字,最小值为0,最大不限,值为1表明和原始大小相 同。缩放值大于1表示放大显示对象,小于1表示所需显示 对象。 ? 这两种方法都可以缩放显示对象,在使用一种属性进行缩 放的时候,另一种属性的值也会对于发生变化。比如使用 尺寸属性改变显示对象时,修改width的值为width/2,则 该显示对象的缩放属性scaleX将变为0.5。 7.4.3 旋转显示对象? 若要旋转显示对象,可使用显示对象的rotation 属性来实现。如果要旋转某一个显示对象,可以 将此属性设置为一个数字(以度为单位),表示 要应用于该对象的旋转量。 7.4.4 淡化显示对象? Flash之所以“闪”,透明度alpha这个属性起到了至关重要的左右。使用 该属性可以使显示对象部分透明或者全部透明,也可以通过alpha属性控 制显示对象的淡入淡出。alpha属性的值是0到1之间的浮点数。0表示完全 透明,1表示完全不透明。 下面的实例实现这样的效果:鼠标滑上显示对象时,该显示对象透明度变 为原来的一半;鼠标滑出显示对象时,该显示对象的透明度变为完全不透 明。使用文档类:SetAlpha,代码如下所示。? 7.4.5 拖曳显示对象? 在ActionScript 3.0中,只有Sprite及其子类才具有StartDrag()、 StopDrag()方法和dropTarget属性。也就是说,只有Sprite及其 子类才可以被拖动,执行拖曳动作。ActionScript3.0中的 StartDrag()方法的参数和使用格式如下所示。 显示对象.startDrag(锁定位置,拖动范围); 格式说明如下: 显示对象:Sprite对象及其子类生成的对象 锁定位置:Boolean值,true表示锁定对象到鼠标位置中心, false表示锁定到鼠标第一次单击该显示对象所在的点上。可选参 数,不选默认为flase。 拖动范围:Rectangle 矩形对象,相对于显示对象父坐标系的一 个矩形范围。可选参数,默认值为不设定拖动范围。? ? ? ?? 7.4.6 遮罩显示对象? 遮罩(mask),是Flash中常用的一种图形处理技术。具体 是指一个显示对象用作遮罩来创建一个孔洞,透过该孔洞 使另一个显示对象的内容可见。具体的说,就是一个显示 对象作为窗口,透过这个窗口显示另一个显示对象的内容。 注意:用于遮罩的显示对象是不会出现在显示屏幕中的。 ? 在ActionScript 3.0中,遮罩效果要使用显示对象的mask 属性来实现。用法格式如下: ? 显示对象1.mask=显示对象2; ? 若不想继续使用遮罩,那么将显示对象的mask属性设置为 null即可。用法格式如下: ? 显示对象1.mask= 7.4.7 碰撞检测? 在ActionScript3.0 中,所有的显示对象都可以 作为检测和被检测的对象来检测碰撞。其方法有 两种,用法格式如下: ? 显示对象1.hitTestObject(显示对象2); ? 说明:该方法用于检测两个显示对象是否发生碰 撞,返回一个Boolean值,若为true,表示两个对 象发生了碰撞,否则为没有碰撞。 ? 显示对象.hitTestPoint(x,y,检测方法); 第8章 使用与控制影片剪辑? 在Adobe Flash CS3 Professional中创建的动画 和影片剪辑元件都是MovieClip,即影片剪辑。在 ActionScript 3.0中,MoveClip是Sprite类的子 类,其地位和重要性都大大的降低。对于面向对 象编程的程序人员来说,它的用处已经不大;但 是对于习惯在Flash中创建动画,并使用代码进行 控制的动画设计人员来说,它还是有着非常重要 的作用。 ? 本章着重介绍在Flash事件轴上添加事件和方法来 操作和控制影片剪辑;同时也从面向对象的角度 着手,使用外部的文档类来操作影片剪辑,实现 文档与代码分离。 8.1 影片剪辑基础知识? 影片剪辑(MovieClip)类是ActionScript用来控 制Flash创作的动画元素的重要工具。通过 MovieClip类的属性和方法,可以控制影片剪辑的 播放与停止,正放和倒放,也可以动态的控制影 片剪辑的播放顺序。本节将介绍影片剪辑的基础 知识和MovieClip类的属性和方法。 8.1.1 MovieClip简介? MovieClip类在ActionScript 1和ActionScript 2中是所有舞台上 的实例的基类,所有的舞台元件都通过MovieClip类的属性和方法 进行控制。在ActionScript 3.0中,影片剪辑只是舞台中众多显 示对象的一种,其使用主要用于需要时间轴支持的显示对象,对 于不需要事件轴的显示对象,尽可能的使用Shape类或者Sprite类 以提高显示性能。 只要是在Flash中创建的影片剪辑元件,Flash就会自动的将该元 件添加到文档的库中。MovieClip会默认其为该类的一个实例,也 就具有了该类的属性和方法。 将库中的影片剪辑的实例放在舞台上时,如果该影片剪辑有多帧, 那么它会按照其时间轴进行循环播放,除非通过使用 ActionScript代码进行控制。作为独有的功能,只有MovieClip类 的对象可以使用Flash创作工具创建的动画效果。其它的显示对象 类的实例都不能创建时间轴动画,要创建动画,只能使用编程方 式来实现。?? 8.1.2 处理MovieClip对象? 在Flash中使用编译器把fla文件发布为SWF文件时, 舞台上的所有影片剪辑实例都会转为MovieClip (影片剪辑)对象。利用“属性”面板中的“实 例名称”文本输入框指定影片剪辑的实例名称, 进而通过访问该名称实现对其访问和控制。如果 该影片剪辑中还嵌套有其它的影片剪辑,则通过 使用点语法加影片剪辑来访问和控制。比如下面 的代码通过点语法控制mc影片剪辑中的mc1影片剪 辑执行播放动作。代码如下所示。 ? mc.mc1.play() 8.2 影片剪辑基本控制? 影片剪辑的控制,主要指控制影片剪辑的播放和 影片剪辑基本属性的变换。通过变换产生一定的 动画效果。本节是为刚学习Flash动画,需要使用 帧代码控制影片剪辑的读者准备的。当然本节也 会从面向对象的角度,使用文档类实现相同的效 果。 8.2.1 影片剪辑的播放控制? 影片剪辑的播放控制,主要是指控制影片和影片 剪辑的播放、停止、前进、后退、倒放和跳转。 通过这些操作,控制影片剪辑的播放流程和顺序, 进而实现不同的动画需求。 ? 本节通过一个简单的控制动画实例,说明这些 MovieClip类方法的基本使用方法。由于本书以 ActionScript编程为主,所以时间轴动画的制作 过程不再介绍,只讲解影片剪辑控制过程中所需 要的代码。 8.2.2 动态加载并控制库中的影片剪辑? 在ActionScript 2.0中被广泛使用的 duplicateMovieClip()、attachMovieClip()函数 在ActionScript3.0中已经被去掉了。现在要实现 相同的效果需要从库中建立类链接,然后通过使 用new语句创建该类的实例实现类似于复制的效果。 8.2.3 加载并控制外部的影片剪辑? 在ActionScript2.0中,可以使用MovieClip的loadMovie()函数和loadMovienum()函 数载入外部的影片,也可以时MovieClipLoader()类来载入并控制外部的影片。在 ActionScript 3.0中,这些函数和类全部被去除了,要实现相同的功能,必须使用显 示对象的Loader类。 若要加载并控制外部的SWF影片,需要执行下面的操作: (1)先创建一个URLRequest对象,用于储存要载入文件的URL。 (2)创建一个Loader对象。 (3)调用Loader对象的load()方法,并把URLRequest对

我要回帖

更多关于 as3.0鼠标点击事件 的文章

 

随机推荐