ADC推荐:Flash 快速入门: 使用 ActionScript 3.0 编程-创建一个简单ActionScript 3类
当你编写ActionScript代码时,你很可能使用面向对象的编程方式来创建对象实例、读取或设置属性值、调用方法执行任务以及响应由对象下发事件。 然而,除了使用内置的对象之外,你也可以定义你自己的对象类型 (也被称为类 )。 当你的 ActionScript项目超越简单功能范畴时,使用你自己的类能够使得编程更为简单,这些类允许你有条不紊地组织你的 ActionScript、将相关功能进行分组以及当你不需要看到细节时可以将它们隐匿。
在你创建一个类之前,你需要花费一些时间考虑你的应用程序的设计方案以及如何构造你的类。 关于如何有条不紊地组织你的类的更多信息,参见Learning ActionScript 3.0中的章节 “Creating your own classes*”。
一旦你准备好类的设计方案,或至少想出该类需要跟踪的信息以及它需要执行的任务,则编写一个类的语句实际上变得非常简单。
在本文的Quick Start中,你将创建一个名称为Greeter class的小型ActionScript类。 Greeter类的结构如下所示 (关于相关完整代码,参见本文Quick Start的结尾部分的范例):
package com.example.quickstart { public class Greeter { // ------- Constructor ------- { // set the name value, if specified } // ------- Properties ------- // ------- Methods ------- { // create the greeting text and pass it as the return value } } }
下面章节将详细给出创建和使用你自己的ActionScript类需要经历的步骤。
创建类文件
ActionScript 3.0类是以文本文档的格式编写的,它与可能使用它的Flash FLA或 Flex MXML 文件是分开放置的。 类文件必须与相应的类具有相同的名称,其扩展名为.as。 类文件应该包含于分层的、与你的类的包结构匹配的文件夹中。 在本例中,我们将创建 Greeter类, 因此该类将存储于名称为 Greeter.as的文件中。 包含包的完整类名是 com.example.quickstart.Greeter (Greeter 类包含于 com.example.quickstart 包中),因此 Greeter.as文件必须存储于具有如下结构的文件夹中: /com/example/quickstart/。 com 文件夹能够包含于你的应用程序的根文件夹中,或包含于作为你的应用程序的ActionScript类路径一部分的文件夹中。
按照下列步骤为Greeter类创建类文件:
- 在Flex Builder 或Flash等ActionScript特定的软件中,利用Dreamweaver等通用编程工具打开一个新的文本文档,或利用任何允许你处理普通文本文档的软件打开一个新的文本文档。
- 将该文件在与下列结构匹配的文件夹中另存为 Greeter.as : /com/example/quickstart/,其中 com文件夹是你的应用程序的根文件夹。
创建类和包声明
你可以使用class声明语句来定义一个类的名称。 一个类必须被指定为 public ,这样其它代码才能够为该类创建实例(实际上,除了几种特别情形,所有ActionScript 3.0类必须为 public )。 因此,相应的完整声明语句格式为:public class ClassName。 该声明语句的后面可以紧跟一对大括号,大括号中包含该类的内容。
此外,class声明语句必须包含于一个package声明语句,以表示该包的名称,在该包中可以找到你的类。 其句法与class声明语句的句法相似:单词package后面紧跟包的名称,之后是一对大括号,在大括号中包含包的内容( 单一的class声明语句+任何必需的import声明语句)。按照下列步骤为Greeter类添加class和package声明语句:
- 在你的ActionScript文件中,输入下列代码:
package com.example.quickstart</li> { public class Greeter { // class contents (methods and properties) will go here } }
该代码利用其一对大括号包含package声明语句 (package com.example.quickstart) ,并且在其中利用另一对大括号包含class声明语句 (public class Greeter) 。
为类添加属性
你可以在类体中使用var声明语句定义类的属性。 除非你添加public 修饰符(与你在class声明语句中使用它的方式相同),否则,句法与你用于声明任何变量的句法相同。
按照下列步骤为Greeter类定义name属性:
- 在包含class声明语句大括号的左右括号之间,添加一个空行并且输入下列代码:
public var name:String;
该行代码定义了name属性,它可以保存String的值。 你可以随意地以与你为一个变量指定一个初始值相同的方式,为属性指定一个默认值 (例如,public var name:String = Fred;)。 不过,在本文的Quick Start中,你将使用constructor方法设置初始值。注意,你也可以通过使用修饰符private而不是public来定义private属性,如下所示:
private var secretValue:Number;
Private属性是基本的变量,在相应的类定义中,任何代码均能够访问它,但在类定义之外的代码不能访问它。
为类添加方法
你可以通过附加的访问修饰符(例如public或private),使用与定义函数相同的句法在你的类中定义方法。 方法定义由下列元素组成:
- 访问修饰符(通常是public或private)
- 单词function
- 函数的名称
- 包含方法可以接受的任何参数定义的左右圆括号
- 一个分号,后面紧跟由方法返回的值的数据类型 (如果方法不返回值, 则为void)
- 左右大括号,包含由方法执行的声明语句
按照下列步骤创建sayHello()方法,它不接受任何参数并且返回一个String值:
- 在包含class声明语句大括号的左右括号之间,输入下列代码:
{ if (name != null name.length > 0) { result = Hello there, + name + .; } else { result = Hello there, anonymous.; } return result; }
构造方法是一个特殊的方法,它可以作为创建类的实例过程的一个部分进行调用。 你可以使用构造方法为属性指定初始值,或完成其它设置细节。 作为构造方法的一个特点,当你定义一个构造方法时,该方法的名称必须与相应类的名称完全相同,该方法必须定义为public,而且你不需要指定返回值的数据类型(或void)。
按照下列步骤为Greeter类创建constructor方法
- 在包含class声明语句大括号的左右括号之间,输入下列代码:
{ name = initialName; }
该代码定义一个constructor方法,它能够随意接受一个单一的String参数。 如果一个值被传递给该参数,则该值将赋给相应的name属性。 否则,该name属性将被设置为 (空字符串) ,因为这是该方法参数的默认值。
如果你没有在你的类中定义constructor 方法 (例如,你不需要执行任何设置操作),则编译器将自动为你的类创建一个空的constructor方法 (不带任何参数和声明语句的方法) 。
添加其它类元素
实际上,你可以定义更多类元素。 创建这些元素的过程比创建方法和属性更为复杂,因此本文的Quick Start 没有包含这些细节内容:
- 存取器(Accessor)是方法和属性的一种混合体。 当你编写代码来定义类时,你可以编写与方法类似的存取器,这样你可以执行多重任务(不仅仅是读取或赋值操作,而在你定义属性时,所有你能够进行的操作就是读取或赋值)。 然而,当你创建一个你自己的类的实例时,你可以像处理一个属性一样处理存取器-仅仅使用名称进行读取或赋值操作。 如需获得更多信息,请参见Learning ActionScript 3.0的章节 Get and set accessor methods* 。
- 在ActionScript中,不使用特定句法定义事件。 取而代之的是,你可以通过使用EventDispatcher类的功能在你的类中定义事件,以便跟踪事件侦听器并且将事件通知它们。 关于如何利用你自己的类创建事件的更多信息,参见ActionScript 3.0 Developer's Guide 中的章节 Handling events* 。
在应用程序中使用类
你可以创建和使用你自己类的实例,其操作方式与你处理任何其它ActionScript类的方式相同。 首先,你必须使用包含类的包和名称的 import 声明语句,以便通知编译器在什么位置寻找你的类。 对于 Greeter 类来说, 相应的import 声明语句如下所示:
import com.example.quickstart.Greeter;
一旦你添加了import 声明语句,则你可以像使用任何其它类一样使用你的类。例如,你可以声明一个变量,其数据类型是你的类,然后创建该类的一个实例存储于该变量之中:
var michaelGreeter:Greeter = new Greeter(Michael);
您还可以将值指派给实例的属性并调用其方法:
michaelGreeter.name = Mike trace(michaelGreeter.sayHello());
创建范例
下面范例创建Greeter类的一个实例,它将name属性设置为 Steve,之后调用sayHello()方法并且将相应的问候语写入屏幕的text 字段 (Flash) 或Text 组件(Flex)。
该范例由两部分构成: Greeter.as 文件(你已经在本文的 Quick Start中创建该文件) 的Greeter 类和一个应用程序文件 (一个Flash FLA或 Flex MXML文件),该应用程序可以创建和使用Greeter 类的实例。 下面代码块给出了一个完整版本的Greeter类。 随后将给出创建该范例应用程序的 Flash 和Flex版本的步骤说明。
package com.example.quickstart { public class Greeter { { name = initialName; } { if (name != null name.length > 0) { result = Hello there, + name + .; } else { result = Hello there, anonymous.; } return result; } } }
按照下列步骤,利用Flash Professional创建本范例:
- 创建一个新的 ActionScript 3.0 Flash 文档并且保存它。
- 从本页面的顶部下载 Flash Professional 源文件 (asgreeter_flash_source.zip)。
- 解压该文件,然后确保Greeter.as 文件与其在ZIP文件中的目录路径结构相同,并且与你的Flash文档 (相应FLA文件)是对应的。 当你导入该类时,它必须具有一个仿效相应包路径的目录结构(com.example.quickstart)。 例如,如果你将你的 Flash文档命名为Greeter.fla,则包含 Greeter.fla文件的文件夹应该具有一个 com文件夹,并且你的文件应该与你的当前文件夹具有如下的关系:
- .../Greeter.fla
- .../com/example/quickstart/Greeter.as
- 通过使用 Text工具,在Stage中创建一个动态text 字段。 将其实例命名为output。
- 利用选择的Frame 1 的keyframe,打开Actions面板,然后输入下面代码。
import com.example.quickstart.Greeter; // Create a Greeter instance with the initial name Steve var myGreeter:Greeter = new Greeter(Steve); // Say hello to Steve output.text = myGreeter.sayHello(); // Move the cursor to the next line output.text += \n; // Set the Greeter instance's name to Harold myGreeter.name = Harold; // Say hello to Harold output.text += myGreeter.sayHello();
在 Flex Builder 中创建此示例:
- 创建一个新的Flex应用程序
- 在Source 视图中,为mx:Application tag: initialize=initApp();添加下列事件处理程序 现在,该mx:Application标签应该如下所示:
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml layout=absolute initialize=initApp();> </mx:Application>
- 在mx:Application 标签中,添加一个带有output id的Text组件。 将其 width 属性设置为 100% ,并且其 textAlign 属性设置为 center。 现在,相应的代码应该如下所示:
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml layout=absolute initialize=initApp();> <mx:Text id=output width=100% textAlign=center /> </mx:Application>
- 在应用程序MXML文件中添加下列mx:Script块,这样,该文件应该如下所示:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="initApp();"> <mx:Script> <![CDATA[ import com.example.quickstart.Greeter; private function initApp():void { // Create a Greeter instance with the initial name "Steve" var myGreeter:Greeter = new Greeter("Steve"); // Say hello to Steve output.text = myGreeter.sayHello(); // Move the cursor to the next line output.text += "\n"; // Set the Greeter instance's name to "Harold" myGreeter.name = "Harold"; // Say hello to Harold output.text += myGreeter.sayHello(); } ]]> </mx:Script> <mx:Text id="output" width="100%" textAlign="center" /> </mx:Application>
- 点击工具栏中的Run按钮以查看相应的结果:
结果
如需下载本范例的 Flash 源文件,请点击这里或右击该 Flash 应用程序,然后从context菜单中选择Download Source。
更多信息
本文摘自Programming ActionScript 3.0 的章节Creating your own classes*。 关于该话题的更多信息,请参阅该章节以及下列资源:
- Programming ActionScript 3.0 中的“Object-oriented programming*”
- Creating your first ActionScript class*(视频教程)
Flash快速入门相关
与本文相关的更多信息
- ActionScript3 FLVPlayback组件入门
- 使用Label组件*
- 在Flash中处理元数据和cue points*
- 使用ActionScript 3加载图片和库资源
- 使用ActionScript 3的绘图命令
关于作者
H. Paul Robertson 是 Adobe Systems 公司的平台开发人员文档团队的一名 ActionScript 开发人员/文档撰写人员。他曾作为一名 Web 应用程序开发人员与 Russell Chun 共同编写了《Macromedia Flash 8 Advanced: Visual QuickPro Guide》*(Peachpit 出版社, 2005 年)。Paul 是一名 Flash 认证开发人员, 拥有印地安那大学的教学系统技术专业硕士学位。在编写 Web 应用程序、撰写关于 Web 应用程序的稿件、讲授 Web 应用程序课程或更新博客*之余, Paul 喜欢收集各种厨房用具, 并乐于同他的三个孩子在乐高玩具、星球大战游戏等各种重大游艺项目上一争高下。
ADC中文站原文地址: http://www.adobe.com/cn/devnet/flash/quickstart/creating_class_as3/index.html

.gif)
.gif)




.gif)
发表新评论