网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月29日漏签0天
奕帆吧 关注:71贴子:1,468
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 14回复贴,共1页
<<返回奕帆吧
>0< 加载中...

【flash8 ActionScript】对象

  • 取消只看楼主
  • 收藏

  • 回复
  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在ActionScript中使用的最强大的结构很可能就是对象了。
对象就是一个具有某些内部性质和特征的编程结构。因此,ActionSctipt中的对象就象可以放到手中的一个物体,例如一本书,书有内容的性质,即每本书都有标题、作者、出版社、页码等,这些性质或特征就被称为“属性”
除了有用于描述的属性之外,对象还可以执行动作。计算机是一个对象,它可以执行动作,如加电和断电、启动和退出应用程序等。汽车可以加速,鸟儿可以飞等。这些都是对象可以执行的动作的例子。当程序员谈到ActionScript对象可以执行的动作时,他们将其称为“方法”。


  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
类起源于它的任何对象定义了所有的基本属性和方法。例如,MovieClip类定义了属性(如_x和_y)和方法(如play())。这些属性和方法被定义在类中,然后每个MovieClip对象就继承了它们。

Actions工具箱中有一个名为ActionScript2.0Classes的文件夹。在那个文件夹中有几个子文件夹,其中放置了ActionScript中的所有内置类。通过使用ActionScript,可以从内置类创建对象,也可以从你已经创建的自定义类创建对象。


2025-06-29 02:13:49
广告
  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在告诉Flash创建一个对象之前,只有类。需要明确地告诉Flash,想创建哪个类的一个实例。类的“实例”与起源于该类的对象是同义的。在大多数情况下,通过调用类的构造函数来创建该类的实例。“构造函数”是一个特殊的函数,它共享该类的名字并创建一个新的实例。构造函数应该作为new语句的一部分来调用,其返回值(新的实例)可以被赋予一个变量:
var variableName:datatype=new ClassName();

用于声明变量的数据类型应该与正在实例化对象的类的名字相匹配。

Object对象是最基本的对象,Object类是ActionScript的基类,下面是使用构造函数来创建一个新的Object实例的例子:
var oFirstObject:Object=new Object();
现在,就可以使用instanceof运算符来验证一下,oFirstObject的确是Object的一个实例:
trace(oFirstObject instanceof Object);//显示:true

当通过构造函数来创建一个String对象时,通常会希望给构造函数传递一个字符串文字(带引号的字符串)参数:
var sTitle:String=new String("ActionScript Bible");
同样,测试一下sTitle是否是String类的一个实例:
trace(sTitle instanceof String);//显示:true


  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
许多类都定义了属性,以便这些类的实例继承那些属性。例如,String类定义了一个length属性。在Action工具箱中可以看到该属性。length属性保存着字符串中的字符数。例始,如果象下面这样定义一个String对象:
var sTitle:String=new String("ActionScript Bible");
那么该对象(sTitle)的length属性的值就是18,因为“ActionScript Bible”有18个字符。如果创建另一个String对象:
var sName:String=new String("Joey Lott");

那么该对象(sName)的length属性的值就是9。
上面的例子创建了两个String对象,名为sTitle和sName。这些对象都起源于相同的类String。因此这些对象都继承了相同的属性集和方法集,包括length属性。但是,这些对象没有相同的属性值。尽管这些对象共享相同的类,但它们仍可以分别一个一个地操作。

下面是用“点语法”来访问一个名为sTitle的String对象的length属性的例子:
sTitle.length;

可以象使用一个变量一样去使用一个属性,例如:
trace(sTitle.length);
if(sTitle.length>12){
trace("The title has more than twelve characters.")
}
var nLengthDelta:Number=sTitle.length-sName.length;

即可以读也可以写一个变量,例如:
var nQuantity:Number=15;//写
trace(nQuantity);//读
许多属性的操作与变量相同,如,可以写一个MovieClip对象的_x和_y属性。但另一方面,某些属性却是“只读”的。也就是说,只可以读该属性的值,但不能直接将一个新的值赋予该属性。
MovieClip对象的_currentframe属性就是这样的一个例子。即使将一个新的值赋予该属性,它也不会接受。下面是一个名为mCircle的MovieClip实例的例子,假设它的时间停在了第1帧:
trace(mCircle._currentframe);//显示:1
mCricle._currentframe=6;//不会接受
trace(mCircle._currentframe);//显示:1


  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
“方法”是一个与对象关联在一起的函数。当访问对象的方法时,与访问函数使用相同的术语,即访问或调用方法。此外,可以使用相同的函数调用运算符[()]来调用方法,并且可以像给函数传递参数那样给方法传递参数。
方法与函数之间的区别是:
.调用方法时,像使用属性那样使用“点语法”。
.调用方法时,Flash会自动知道执行特别针对那个对象的动作。这一点与函数不同。函数不会在任何特殊的对象上执行任何动作。

下面是一个调用一个对象的方法的例子。首先创建一个String对象,然后调用substr()方法。该方法返回从指定索引(0)开始、包含指定字符数量(12)的初始字符串的一部分。
var sTitle:String=new String("ActionScript Bible");
var sSubject:String=sTitle.substr(0,12);
trace(sSubject);//显示:ActionScript

方法可以执行各种动作。ActionScript的类有做各种事情的方法,从播放一个声音到加载一个XML(eXtensible Markup Language,可扩展标记语言)文档来创建新的文本域。


  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有一些属性和方法,它们是从它们自己的类中调用,而不是从一个实例化的对象中调用的。这些属性被称为“静态属性”,从一个类中调用的方法被称为“静态方法”。
静态属性的例子:可以从Math类读取诸如PI和SQRT2的静态属性,还可以从Key类读取诸如ENTER,SPACE和CAPSLOCK的静态属性。静态属性Math.PI保存着数学上的pi(即3.142)的值,静态属性Key.SPACE保存着键盘上Space键的键代码值。因为这些值在该类的每个实例中都不会变,所以就没有必要非得从各个实例中访问这些值了。实际上,甚至不能创建这些类中某些类(如Math类和Key类)的实例,因为不需要创建总是全都一样的实例。例如,不能从创建Math类的实例中得到什么好处。因为Math类仅仅作为数学上的静态属性和静态方法的一个容器。

静态属性也称常量,通常用大写字符表示

有少数内置的类有静态方法。静态方法的例子包括Mouse.hide()因为只有一个鼠标,就没必要创建多个Mouse的实例了,Math.sqrt()和Selection.getFocus()因为只能有一个选择范围,所以就没有必要实例化Selection类了。


  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
某些内置的ActionScript类被称为“动态类”。这就是说,可以将新的属性和方法添加到实例中,即使没有给该类定义过这些属性。 为了给从一个动态类实例化的对象定义一个新的属性,需要做的事只是向它赋予一个新的值,好象它在该对象中已经存在似的。
var oDynamicObject:Object=new Object();
oDynamicObject.dynamicProperty="New property value";
//显示:New property value
trace(oDynameicObject.dynamicProperty);
如果查看Actions工具箱,就会看到Object类并没有定义任何名为dynamicProperty的属性。但是,一旦该对象被实例化,就可以为那个对象(只有那个对象)创建新的属性。

添加新的对象方法,和添加对象属性一样,简单地定义方法,然后将它赋予对象的一个自定义属性。例如:

var oDynamicObject:Object=new Object();
oDynamicObject.dynamicMethod=function():Void{
trace("Method invoked");
};
//现在调用该方法
oDynamicObject.dynamicMethod();

通常给一个对象添加自定义的方法不是什么特别好的习惯。但在某些情况下,它可能是有用的。

尽管好些类是动态的,但只有几个较适于为其实例定义自定义属性和方法。Object类就是这样一个例子。Object类经常被用于生成关联数组,并且可以给其实例添加自定义属性。
LoadVars和LocalConnection类是其他两个需要为其实例添加自定义属性和方法的动态类的例子。在这些情况下,类如何工作是固有的。
虽然其他类也是动态的,但通常认为不适于为其实例定义自定义属性和方法。
例如,常用的例子就是MovieClip类。MovieClip类是动态的,许多程序员的确给MovieClip实例添加自定义的属性和方法。
但是,当不增加自定义属性和方法时,代码一般更可扩展和更可读。如果需要的话,可能有些更好的方法以实现相同的目的。例如,如果一个对象需要附加的属性和方法,就可以定义一个该类的子类一般会更好些。


  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
事件处理方法,它们是为某种类型的对象而存在的专门命名的方法,当一个相应的事件发生时,Flash会自动地调用它们。例如,当用户用鼠标单击实例时,就会自动调用MovieClip对象的onPress()事件处理方法。但默认情况下,没有定义这些事件处理方法。这是因为事件发生时,想如何处理取决于自己。因此,必须定义方法。
一旦创建了一个可以接受事件处理方法的对象,就可以用几乎与在“添加新的对象方法”一节中谈到的方式相同的方式来定义事件处理方法。在这种情况下,惟一的区别是:希望将函数赋予特定的事件处理方法的名字。下面的代码是给名为mCircle的MovieClip对象定义onPress()事件处理方法的一个例子:
mCircle.onPress=function():Void{
trace("You clicked the circle.");
};


2025-06-29 02:07:49
广告
  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
允许自己与自己交谈。这正好也是希望帮助对象实现的事情。当为一个对象创建自定义方法时,或当定义一个事件处理方法时,需要告诉一个对象给它自己定位。例如,如果为MovieClip对象定义一个onPress()方法,就希望能够从那个方法中引用该对象的属性。正如已经学到的那样,当访问属性时使用点语法,在当前情况下也是这样。唯一需要知道的事是:一个对象用什么名字来引用它自己。
在ActionScript中,可以使用关键字this来从一个对象自己的方法中引用该对象。下面的例子表示,一个名为mCircle的MovieClip实例在onPress()事件处理方法中引用它自己的_xscale和_yscale属性。其结果是,当用户单击该实例时,该MovieClip对象就放大50%。
mCircle.onPress=function():void{
this._xscale=150;
this._yscale=150;
};

当然,可以用相同的方式来引用对象的方法,即在自定义方法或事件处理方法的定义中使用this关键字。在这个例子中,当用户单击名为mCircle的MovieClip实例时,该对象的时间轴就开始播放。
mCircle.onPress=function():Void{
this.play();
};
this关键字总是对当前对象的引用。在上面的例子中,this是指mCircle的MovieClip实例。很多对象在其内部不知道它们自己的名字,它们只知道如何用this来引用自己。


  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
现在可以来创建Flash应用程序了,在这个练习中,使用一个函数和一个简单的Date对象来创建一个新的Flash应用程序,以便将当前时间写到Output面板中。 
1.打开一个新的flash文档,将该文档保存为displayTimer.fla. 
2.在主时间轴选择默认图层的第1帧,并打开Actions面板。 
3.在脚本窗格中输入如下代码: 
displayTime(); 
function displayTime():Void{ 
var dNow:Date=new Date(); 
var nHours:Number=dNow.getHours(); 
var nMinutes:Number=dNow.getMinutes(); 
var nSeconds:Number=dNow.getSeconds(); 
trace("Hours:"+nHours); 
trace("Minutes:"+nMinutes); 
trace("Seconds:"+nSeconds); 
} 
4.测试影片 

如果一切都计划进行,就可以看见一个时间显示序列 


注:如果不用参数就调用Date构造函数的话,Flash会自动创建一个新的、表示计算机当前时间的对象。var dNow:Date=new Date();

getHours()、getMinutes()、getSeconds()方法以数字的形式返回Date对象的时、分、秒部分。将这些值赋予变量。
var nHours:Number=dNow.getHours(); 
var nMinutes:Number=dNow.getMinutes(); 
var nSeconds:Number=dNow.getSeconds();


  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
MovieClip类属于内置ActionScript类的一个小概念上的组,它们不通过构造函数的标准方式来进行实例化。MovieClip,Button和TextFoeld类的实例都是可以在创作时通过在舞台中拖拉或绘制一个实例面创建的对象。即使没有注意到这一点也是这样,即每次在舞台中创建一个影片剪辑或按钮时,或每次一个动态文本域或输入文本域时,就是在创建一个对象。
当在ActionScript中使用影片剪辑时,不能使用构造函数来实例化它们。例如,下面的代码不会在舞台中创建一个新的MovieClip实例:
mCircle:MovieClip=new MovieClip();
相反,当在创作时创建实例时,应该确保用属性检查器给它取一个实例名。
当在创作时创建按钮实例和文本域实例时,也应该用同样的方式给实例取名。按钮的属性检查器几乎与影片剪辑的属性检查器一样。文本域的属性检查器稍微有点区别,当想在创作时创建一个文本域实例时,可以使用text工具在舞台中绘制文本形状。然后,确保在属性检查器中选择了Dynamic Text或Input Text选项。静态文本不是一个对象。
一旦创建了一个新的MovieClip,Button或TextField对象,就可以用在其他对象中所用的方式来调用该对象的属性和方法了。例如,如果创建了一个名为mCircle的MovieClip实例,就可以使用标准的点语法来访问它的_x属性:
trace(mCircle._x);
此时唯一要注意的是:必须将引用对象的ActionScript放置在创建该对象的时间轴中。换句话说,该对象必须处在试图引用它的作用域中。如果在主时间轴中创建了一个新的MovieClip对象,那么可以从该主时间轴的ActionScript中引用该对象。


  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在“用对象来显示时间”一节中创建了一个Flash应用程序,其中有一个函数,当调用该函数时,在Output面版中显示时间。在这个练习中,会对该例子稍微做点修改,即当用户在舞台中单击MovieClip实例时显示时间。 

1.打开一个新的Flash文档,并将其保存为displayTimeWithMovieClip.fla。 
2.创建一个新的影片剪辑元件。其实现方法是,在Windows操作系统中按Ctrl+F8组合键(即在按住Ctrl键后再按F8键),或选择Insert--New Symbol菜单命令。 
3.出现Create New Symbol对话框。在Name域中输入Circle。确保选中了Movie Clip选项,单击OK按钮。 
4.新元件将按编辑模式打开。使用Oval工具绘制一个实心圆。该圆的精确大小和颜色并不特别重要,只需要确保可以看到它并且用户可以单击到它便可。 
5.返回主时间轴。 
6.重新命名默认图层Circle。 
7.打开库并将Circle元件的一个实例拖动到舞台中。 
8.在舞台中选该实例,通过属性检查器将该实例命名为mCircle。 
9.创建一个新的图层,并将该图层命名为Actions。 
10.选择Actions图层的第1帧(唯一的一帧),并打开Actions面板。 
11.将如下代码添加到脚本窗格中: 
mCircle.onPress = function():Void {
var dNow:Date = new Date();
var nHours:Number = dNow.getHours();
var nMinutes:Number = dNow.getMinutes();
var nSeconds:Number = dNow.getSeconds();
trace("Hours:"+nHours);
trace("Minutes:"+nMinutes);
trace("Seconds:"+nSeconds);
};
12.保存该文档开始测试该影片。当单击该圆时,就会看到显示在Output面板中的当前时间。每次单击时,一个新的、更改后的值的集合就被附加到Output面板列表中。 


首先,简单地创建了一个新的、包含圆形艺术作品的影片剪辑元件。一旦创建了该元件,下一步就是在舞台中创建该元件的一个新的实例。所以,返回到主时间轴,从库中将一个实例拖动到舞台中,并命名该新实例。 
在它自己的图层中创建ActionScript代码是个好习惯。当需要定位代码时,这会有所帮助。因此,所做的下一件事就是专门为此创建一个名为Actions的新图层。创建该图层之后,就将代码添加到该图层的关键帧中。 
与前面例子不同的是,该代码被包含在一个事件处理方法中,而不是通常的函数中,并且当事件发生时才调用该代码,而不是手工调用函数。


  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
可以用与创建间隔函数几乎相同的方式来创建间隔方法。实际上,仍然使用相同的setInterval()命令。区别在于,需要给setInterval()提供某些稍微有些不同的参数,因为Flash现在需要知道的不仅是要调用的函数,而且还需要知道从中调用该函数(方法)的对象。
当想用setInterval()命令来创建间隔方法时,就使用下需的语法:
setInterval(object,functionName,interval[,param1 ...,paramN]);
除了在语法上有点不同之外,无论调用对象的方法还是调用函数,setInterval()命令的作用都是相同的。按指定的间隔调用该方法。如果指定了所有参数,则每次调用时就会将它们传递给该方法,并且setInterval()命令会返回一个ID。以后可以通过在clearInterval()中使用该ID来停止该间隔。
重要的是:传递给setInterval()的参数是否具有正确的类型。第1个参数应该是对对象(想调用它的方法)的引用。相反,第2个参数不是对方法的引用,而是方法的名字字符串。第3个参数应该是一个指定间隔的数字值(以毫秒为单位),下面的例子告诉Flash,按大约每秒一次的间隔调用一个名为mCircle的MovieClip对象的nextFrame()方法:
var nFrameInterval:Number=setInterval(mCircle,"nextFrame",1000);


  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Object类是ActionScript中最基本和最础的类。实际上,ActionScript中的所有其他类都基于这个基本的类。正是因为Object类是如此的基本,所以它不像许多其他类那样用于一个专门的目的。例如,String类专门处理字符串,ColorTransform类能够用程序来使用颜色。Object类不属于任何专门的任务。相反,Object类的最普通的用途就是创建作为相在属性的容器的简单对象。这种构造称关联数组(associative array)和哈希表(hashtable)。关联数组仅仅是一个具有某些共性的属性的基本对象。例如,可以创建一个包含有关一辆汽车的信息的关联数组。该对象可以有各种属性,如make(制造商)、model(款式)和exterforColor(外表颜色)。在ActionSctipt中,创建这样一个对象的代码如下所示:
//首先创建新的Object对象。
var oCar:Object=new Object();
//然后定义新的属性和值。
oCar.make="Oldsmobile";
oCar.model="Alero";
oCar.exteriorColor="blue";

大多数内置的ActionScript类都是动态的,即可以给实例添加新的属性,即使没有在该类中定义它们。对于按关联数组使用的Object对象而言,同样可以称自定义属性为“关键字”。在上面的例子中,名为oCar的关联数组有三个关键字:make,modle和exteriorColor。
关联数组有利于将相关的数据组织到一起。例如,在上面的例子中,将三部分数据(制造商、款式和外表颜色)组织到一起是有意义的,因为它们都属于同一辆汽车。作为选择,可以创建如下所示的三个变量:
var aCarMake:String="Oldsmobile";
var aCarModel:String="Alero";
var aCarExteriorColor:String="blue";
将这些值组织到一起作为一个单独的关联数组的关键字有几个优点。第一,如果将数据都组织到一个单独的对象中,就比较容易看清它们之间的关系。第二,将那些数据传递给一个函数或一个方法,或者从一个函数或一个方法中返回那些数据就容易多了。


2025-06-29 02:01:49
广告
  • 啾啾鸣虫
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不仅可以像上面所述的那样用构造函数来创建Object对象,还可以使用对象文本语法来创建Object对象。对象文本语法是:
{property1:value1[,...propertyN:valueN]}

例如,可以通过使用下面的对象文本语法来创建与前面一节中相同的oCar对象:
var oCar:Object={make:"Oldsmobile",model:"Alero",exteriorColor:"blue"};
正如所见,在某些时候这个语法可以更简练。这是对象文本语法的优势之一。另一个优势是:可以在一个函数调用或类似情况中同时创建对象。如果一个函数或方法需要一个Object对象作为参数,就可以直接在调用该函数或方法时定义该对象。例如,下面的例子显示了一个名为displayCarInformation()的函数,它需要一个单独的对象参数。可以调用该函数,并同时定义该参数值。
function displayCarInformation(oCarInfo:Object):Void{
trace("Make:"+oCarInfo.make);
trace("Model:"+oCarInfo.model);
trace("Exterior Color:"+oCarInfo.exteriorColor);
}
displayCarInformation({make:"Oldsmobile",model:"Alero",exteriorColor:"blue"});
上面这段代码的结果就是在Output面板中显示如下内容:
Make:Oldsmobile
Model:Alero
Exterior Color:blue
使用对象文本语法和使用构造函数创建对象这两种方式都有用武之地。如果想在函数调用中简单地同时定义一个对象,就使用对象文本方法。另一方面,如果对象有许多属性/关键字,那么用对象文本语法来定义对象与使用标准的构造函数语法来定义对象相比,也许不太可读。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 14回复贴,共1页
<<返回奕帆吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示