Actionscript3教程处理对象篇.docx
- 文档编号:4451194
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:10
- 大小:229.53KB
Actionscript3教程处理对象篇.docx
《Actionscript3教程处理对象篇.docx》由会员分享,可在线阅读,更多相关《Actionscript3教程处理对象篇.docx(10页珍藏版)》请在冰豆网上搜索。
Actionscript3教程处理对象篇
Actionscript3处理对象篇
处理对象
ActionScript是一种面向对象的编程语言。
面向对象的编程仅仅是一种编程方法,它与使用对象来组织程序中的代码的方法没有什么差别。
先前我们将计算机程序定义为计算机执行的一系列步骤或指令。
那么从概念上讲,我们可能认为计算机程序只是一个很长的指令列表。
然而,在面向对象的编程中,程序指令被划分到不同的对象中—代码构成功能块,因此相关类型的功能或相关的信息被组合到一个容器中。
事实上,如果您已经在Flash中处理过元件,那么您应已习惯于处理对象了。
假设您已定义了一个影片剪辑元件(假设它是一幅矩形的图画),并且已将它的一个副本放在了舞台上。
从严格意义上来说,该影片剪辑元件也是ActionScript中的一个对象,即MovieClip类的一个实例。
您可以修改该影片剪辑的不同特征。
例如,当选中该影片剪辑时,您可以在“属性”检查器中更改许多值,例如,它的x坐标、宽度,进行各种颜色调整(例如,更改它的alpha值,即透明度),或对它应用投影滤镜。
还可以使用其它Flash工具进行更多更改,例如,使用
“任意变形”工具旋转该矩形。
在Flash创作环境中修改一个影片剪辑元件时所做的更改,同样可在ActionScript中通过更改组合在一起、构成称为MovieClip对象的单个包的各数据片断来实现。
在ActionScript面向对象的编程中,任何类都可以包含三种类型的特性:
■属性
■方法
■事件
这些元素共同用于管理程序使用的数据块,并用于确定执行哪些动作以及动作的执行顺序。
属性
属性表示某个对象中绑定在一起的若干数据块中的一个。
Song对象可能具有名为artist和title的属性;MovieClip类具有rotation、x、width和alpha等属性。
您可以像处理单个变量那样处理属性;事实上,可以将属性视为包含在对象中的“子”变量。
以下是一些使用属性的ActionScript代码的示例。
以下代码行将名为square的MovieClip移动到100个像素的x坐标处:
square.x=100;
以下代码使用rotation属性旋转squareMovieClip以便与triangleMovieClip的旋转相匹配:
square.rotation=triangle.rotation;
以下代码更改squareMovieClip的水平缩放比例,以使其宽度为原始宽度的1.5倍:
square.scaleX=1.5;
请注意上面几个示例的通用结构:
将变量(square和triangle)用作对象的名称,后跟一个句点(.)和属性名(x、rotation和scaleX)。
句点称为“点运算符”,用于指示您要访问对象的某个子元素。
整个结构“变量名-点-属性名”的使用类似于单个变量,变量是计算机内存中的单个值的名称。
方法
“方法”是指可以由对象执行的操作。
例如,如果在Flash中使用时间轴上的几个关键帧和动画制作了一个影片剪辑元件,则可以播放或停止该影片剪辑,或者指示它将播放头移到特定的帧。
下面的代码指示名为shortFilm的MovieClip开始播放:
shortFilm.play();
下面的代码行使名为shortFilm的MovieClip停止播放(播放头停在原地,就像暂停播放视频一样):
shortFilm.stop();
下面的代码使名为shortFilm的MovieClip将其播放头移到第1帧,然后停止播放(就像后退视频一样):
shortFilm.gotoAndStop
(1);
正如您所看到的一样,您可以通过依次写下对象名(变量)、句点、方法名和小括号来访问方法,这与属性类似。
小括号是指示要“调用”某个方法(即指示对象执行该动作)的方式。
有时,为了传递执行动作所需的额外信息,将值(或变量)放入小括号中。
这些值称为方法“参数”。
例如,gotoAndStop()方法需要知道应转到哪一帧,所以要求小括号中有一个参数。
有些方法(如play()和stop())自身的意义已非常明确,因此不需要额外信息。
但书写时仍然带有小括号。
与属性(和变量)不同的是,方法不能用作值占位符。
然而,一些方法可以执行计算并返回可以像变量一样使用的结果。
例如,Number类的toString()方法将数值转换为文本表示形式:
varnumericData:
Number=9;
vartextData:
String=numericData.toString();
例如,如果希望在屏幕上的文本字段中显示Number变量的值,应使用toString()方法。
TextField类的text属性(表示实际在屏幕上显示的文本内容)被定义为String,所以它只能包含文本值。
下面的一行代码将变量numericData中的数值转换为文本,然后使这些文本显示在屏幕上名为calculatorDisplay的TextField对象中:
calculatorDisplay.text=numericData.toString();
事件
我们已经介绍了计算机程序就是计算机分步执行的一系列指令。
一些简单的计算机程序仅包括计算机执行的几个步骤以及程序的结束点。
然而,ActionScript程序可以保持运行、等待用户输入或等待其它事件发生。
事件是确定计算机执行哪些指令以及何时执行的机制。
本质上,“事件”就是所发生的、ActionScript能够识别并可响应的事情。
许多事件与用户交互有关—例如,用户单击按钮,或按键盘上的键—但也有其它类型的事件。
例如,如果使用ActionScript加载外部图像,有一个事件可让您知道图像何时加载完毕。
本质上,当ActionScript程序正在运行时,AdobeFlashPlayer只是坐等某些事情的发生,当这些事情发生时,FlashPlayer将运行您为这些事件指定的特定ActionScript代码。
基本事件处理指定为响应特定事件而应执行的某些动作的技术称为“事件处理”。
在编写执行事件处理的ActionScript代码时,您需要识别三个重要元素:
■事件源:
发生该事件的是哪个对象?
例如,哪个按钮会被单击,或哪个Loader对象正在加载图像?
事件源也称为“事件目标”,因为FlashPlayer将此对象(实际在其中发生事件)作为事件的目标。
■事件:
将要发生什么事情,以及您希望响应什么事情?
识别事件是非常重要的,因为许多对象都会触发多个事件。
■响应:
当事件发生时,您希望执行哪些步骤?
无论何时编写处理事件的ActionScript代码,都会包括这三个元素,并且代码将遵循以下基本结构(以粗体显示的元素是您将针对具体情况填写的占位符):
functioneventResponse(eventObject:
EventType):
void
{
//此处是为响应事件而执行的动作。
}
eventSource.addEventListener(EventType.EVENT_NAME,eventResponse);
此代码执行两个操作。
首先,定义一个函数,这是指定为响应事件而要执行的动作的方法。
接下来,调用源对象的addEventListener()方法,实际上就是为指定事件“订阅”该函数,以便当该事件发生时,执行该函数的动作。
我们将更为详细地讨论其中每个部分。
“函数”提供一种将若干个动作组合在一起、用类似于快捷名称的单个名称来执行这些动作的方法。
函数与方法完全相同,只是不必与特定类关联(事实上,方法可以被定义为与特定类关联的函数)。
在创建事件处理函数时,必须选择函数名称(本例中为eventResponse),还必须指定一个参数(本例中的名称为eventObject)。
指定函数参数类似于声明变量,所以还必须指明参数的数据类型。
将为每个事件定义一个ActionScript类,并且为函数参数指定的数据类型始终是与要响应的特定事件关联的类。
最后,在左大括号与右大括号之间({...}),编写您希望计算机在事件发生时执行的指令。
一旦编写了事件处理函数,就需要通知事件源对象(发生事件的对象,如按钮)您希望在该事件发生时调用函数。
可通过调用该对象的addEventListener()方法来实现此目的(所有具有事件的对象都同时具有addEventListener()方法)。
addEventListener()方法有两个参数:
■第一个参数是您希望响应的特定事件的名称。
同样,每个事件都与一个特定类关联,而该类将为每个事件预定义一个特殊值;类似于事件自己的唯一名称(应将其用于第一个参数)。
■第二个参数是事件响应函数的名称。
请注意,如果将函数名称作为参数进行传递,则在写入函数名称时不使用括号。
了解事件处理过程
下面分步描述了创建事件侦听器时执行的过程。
在本例中,您将创建一个侦听器函数,在单击名为myButton的对象时将调用该函数。
程序员实际编写的代码如下所示:
functioneventResponse(event:
MouseEvent):
void
{
//此处是为响应事件而执行的动作。
}
myButton.addEventListener(MouseEvent.CLICK,eventResponse);
下面是此代码在FlashPlayer中运行时的实际工作方式:
1.加载SWF文件时,FlashPlayer会注意到以下情况:
有一个名为eventResponse()的函数。
2.FlashPlayer随后运行该代码(具体地说,是指不在函数中的代码行)。
在本例中,只
有一行代码:
针对事件源对象(名为myButton)调用addEventListener()方法,并
将eventResponse函数作为参数进行传递。
a.在内部,myButton包含正在侦听其每个事件的函数的列表,因此,当调用其
addEventListener()方法时,myButton将eventResponse()函数存储在其事件
侦听器列表中。
3.在某一时刻,用户单击myButton对象以触发其click事件(在代码中将其标识为
MouseEvent.CLICK)。
此时发生了以下事件:
a.FlashPlayer创建一个对象,它是与所述事件(本示例中为MouseEvent)关联的类
的实例。
对于很多事件,这是Event类的实例;对于鼠标事件,这是MouseEvent
实例;对于其它事件,这是与该事件关联的类的实例。
创建的该对象称为“事件对
象”,它包含有关所发生的事件的特定信息:
事件类型、发生位置以及其它特定于事
件的信息(如果适用)。
b.FlashPlayer随后查看myButton存储的事件侦听器的列表。
它逐个查看这些函数,以
调用每个函数并将事件对象作为参数传递给该函数。
由于eventResponse()函数是
myButton的侦听器之一,因此,FlashPlayer将在此过程中调用eventResponse()
函数。
c.当调用eventResponse()函数时,将运行该函数中的代码,因此,将执行您指定的
动作。
事件处理示例
以下是几个更为具体的事件示例,让您对在编写事件处理代码时常用的一些事件元素以及可
能的变化形式有一个了解:
■单击按钮开始播放当前的影片剪辑。
在下面的示例中,playButton是按钮的实例名称,
而this是表示“当前对象”的特殊名称:
this.stop();
functionplayMovie(event:
MouseEvent):
void
{
this.play();
}
playButton.addEventListener(MouseEvent.CLICK,playMovie);
■检测文本字段中的键入操作。
在下面的示例中,entryText是一个输入文本字段,而
outputText是一个动态文本字段:
functionupdateOutput(event:
TextEvent):
void
{
varpressedKey:
String=event.text;
outputText.text="Youtyped:
"+pressedKey;
}
entryText.addEventListener(TextEvent.TEXT_INPUT,updateOutput);
■单击按钮导航到一个URL。
在本例中,linkButton是该按钮的实例名称:
functiongotoJavaUUSite(event:
MouseEvent):
void
{
varadobeURL:
URLRequest=newURLRequest("
navigateToURL(adobeURL);
}
linkButton.addEventListener(MouseEvent.CLICK,gotoJavaUUSite);
创建对象实例
当然,在ActionScript中使用对象之前,该对象首先必须存在。
创建对象的步骤之一是声明
变量;然而,声明变量仅仅是在计算机的内存中创建一个空位置。
您必须为变量指定实际值
—即创建一个对象并将它存储在该变量中—然后再尝试使用或处理该变量。
创建对象的过
程称为对象“实例化”;也就是说,创建特定类的实例。
有一种创建对象实例的简单方法完全不必涉及ActionScript。
在Flash中,当将一个影片剪
辑元件、按钮元件或文本字段放置在舞台上,并在“属性”检查器中为它指定实例名时,
Flash会自动声明一个拥有该实例名的变量、创建一个对象实例并将该对象存储在该变量
中。
同样,在AdobeFlexBuilder中,当您以AdobeMacromedia®MXML™创建一个组
件(通过用MXML标签进行编码或通过将组件放置在处于设计模式下的编辑器中)并为该
组件分配一个ID(在MXML标记中或在Flex属性视图中)时,该ID将成为一个
ActionScript变量的名称,并且会创建该组件的一个实例并将它存储在该变量中。
然而,您不会总是希望直观地创建对象。
还可以通过几种方法来仅使用ActionScript创建对
象实例。
首先,借助几个ActionScript数据类型,可以使用“文本表达式”(直接写入
ActionScript代码的值)创建一个实例。
下面给出了一些示例:
■文本数字值(直接输入数字):
varsomeNumber:
Number=17.239;
varsomeNegativeInteger:
int=-53;
varsomeUint:
uint=22;
■文本字符串值(用双引号将本文引起来):
varfirstName:
String="George";
varsoliloquy:
String="Tobeornottobe,thatisthequestion...";
■文本布尔值(使用字面值true或false):
varniceWeather:
Boolean=true;
varplayingOutside:
Boolean=false;
■文本XML值(直接输入XML):
varemployee:
XML=
;
ActionScript还为Array、RegExp、Object和Function数据类型定义了文本表达式。
有
关这些类的详细信息,请参阅第189页的“处理数组”、第243页的“使用正则表达式”
和第80页的“Object数据类型”。
对于其它任何数据类型而言,要创建一个对象实例,应将new运算符与类名一起使用,如下
所示:
varraceCar:
MovieClip=newMovieClip();
varbirthday:
Date=newDate(2006,7,9);
通常,将使用new运算符创建对象称为“调用类的构造函数”。
“构造函数”是一种特殊方
法,在创建类实例的过程中将调用该方法。
请注意,当以此方法创建实例时,请在类名后加
上小括号,有时还可以指定参数值—这是在调用方法时另外可执行的两个操作。
熟悉使用newClassName()创建对象的方法是非常重要的。
如果需要创建无可视化表示形
式的ActionScript数据类型的一个实例(无法通过将项目放置在Flash舞台上来创建,也
无法在FlexBuilderMXML编辑器的设计模式下创建),则只能通过使用new运算符在
ActionScript中直接创建对象来实现此目的。
具体到Flash中,new运算符还可用于创建已在库中定义、但没有放在舞台上的影片剪辑元
件的实例。
有关详细信息,请参阅第430页的“使用ActionScript创建MovieClip对象”。
注意:
甚至对于可使用文本表达式创建实例的数据类型,也可以使用new运算符来创建对象实例。
例
如,下面的两行代码执行的是相同的操作:
varsomeNumber:
Number=6.33;
varsomeNumber:
Number=newNumber(6.33);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Actionscript3 教程 处理 对象