当前位置: 首页 > 图文教程 > Flash动画 > Flash动画制作 > AS 对象篇

Flash动画制作
巧用超级解霸在Flash V5.0中插入录像
教你用Flash MX来制作简单的课件界面
Flash MX 2004 ActionScript图文教程(二)
Flash MX 2004 ActionScript图文教程(三)
Flash MX 2004 ActionScript图文教程(四)
Flash MX 2004 ActionScript图文教程(五)
Flash MX 2004 ActionScript图文教程(六)
flash场景之间相互跳转的实现方法
Flash本地加密
FLASH -- 关于变量的问题FLASH -- 关于变量的问题
Flash5 画任意直线教程
Flash MX 视频导入功能详解
制作飞舞的蝴蝶
Flash MX 2004 ActionScript图文教程(七)
Flash MX 2004 ActionScript图文教程(八)
Flash MX 2004 ActionScript图文教程(九)
Flash MX 2004 ActionScript图文教程(十)
Flash教程 飞翔的文字
Flash MX 2004 ActionScript图文教程(十一)
制作Flash网站技巧拾零

Flash动画制作 中的 AS 对象篇


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-22   浏览: 55 ::
收藏到网摘: n/a

本文为软晨学习网合作伙伴印象特别供稿,转载必须取得授权

  虽然AS不是真正的面向对象的编程,但是它也有对象的概念。这个概念贯穿整个AS的始终,所以,对对象的理解,比对语法或者其他的理解更为重要。现在开始吧:

首先,我们来了解一下[color=Red]路径[/color],路径分两种:[color=Maroon][b]绝对路径和相对路径[/b][/color]。做过html的朋友应该知道这个概念。但这里我还是要详细解释一下,我认为对路径的理解要深入,我初学的时候就是磕在路径上。

在讲路径之前,有必要先讲一下 .语法 : 举例说明,这里要表示房间里的桌子上的一本
书,用 .语法这么表示:
[quote]房间.桌子.书[/quote]
如果要再细到书上的页上面的字,很显然
[quote]房间.桌子.书.页面.字[/quote]
看明白了吧?我也不懂得怎么说, .语法就是这样表示对象的,[color=Maroon][b]点的前面是其后面的父级[/b][/color]。如房间是桌子的父级,桌子的子级就是书。
还是不明白?这样吧,你把 . 里写成“里面的”就可以了,这样就是
[quote]房间(里面的)桌子(里面的)书(里面的)页面(里面的)字[/quote]
这样容易多了吧?

现在我开始说路径了,其中也要夹杂的对象的说明,看:

从例子入手。新建一个Flash文件,然后创建一个MovieClip,MC命名为“MC”,放在主场景里面,然后再创建一个按钮,放在“MC”里面,然后从库里面拖一个出来放在主场景,分别给这两个元素实例命名([color=Red]Instance Name [/color], 注意是实例名不是MC的名字):MC->myMC button->myBtn
现在我们假设主场景是房子,MC是桌子,按钮是书,那么分别怎么表达房子,桌子,书呢?如下

[quote]_root 房子
_root.myMc 房子.桌子
_root.myMc.myBtn 房子.桌子.书[/quote]
这里的 _root 是Flash的关键字,表示主场景的 Timeline (时间线)。
很容易理解对不。这里的 房子,桌子,书 都是我们要理解的“[color=Maroon][b]对象[/b][/color]”。

当你找到这个对象后,才能对对象进行操作,才能给对象施加方法。比如,我现在要打扫房子,打扫是方法,但对象是房子,表达式是这样 :
[quote]房子.打扫()[/quote]
如果你不能正确的表达房子这个对象,你的打扫也就不能正确的实施了。

[color=Maroon][b]*说明[/b][/color]:这里为什么要在打扫后面加()呢?因为打扫是方法不是对象,为了让Flash知道这是个方法,我们必须加上(),要不然它会以为房子里面有“打扫”这个东西。

现在,我们可以很容易的对房间里面的各个东西进行操作,如

[quote]房子.打扫();
房子.木桌子.整理();
房子.玻璃桌子.打碎();
房子.书桌.书.看();[/quote]
等等,相信你把它们"翻译"成AS代码没什么问题吧 :) 比如要主场景停止播放,就是
[quote]_root.stop();[/quote]
要MC停止播放,就是
[quote]_root.myMc.stop();[/quote]
现在说说相对路径。还是上面的例子。假如给你下了一个命令:修理房子里面的红色的椅子。那么怎么表达呢?就是:
[quote]房子.红色椅子.修理()[/quote]
无论给你下命令的人在哪里告诉你的,你都会知道要修理的椅子是哪一张。但是他如果这么说:修理你现在坐的这张椅子。红色的?还是蓝色的?这就要取决于你坐在哪个椅子上了。那么相对的表达式就是

[quote]我坐的椅子.修理();[/quote]
这里为什么不这么写呢:
[quote]房子.我坐的椅子.修理()[/quote]
这么写是错的,因为我坐的椅子是不固定的,我说不定把椅子搬到房子外面去坐,那这个表达式就错了,因为椅子根本就不在房子里面。
换过来用Flash实例说明。现在我想让主场景下的 myMC 在一开始就不要播放,而是先停止。那么你有什么办法呢?
我你猜想到的办法可能就是在主场景放入这个MC的那个帧写上:

[quote]_root.myMc.stop();[/quote]
这个是对的。但是一旦 myMc 的名字一变,你就得跟着改这句话了。


有没有办法不管这个“MC”的实例名不管怎么改,都会被我们同样一句的AS找到?当然可以,前提是你的AS必须“[color=Maroon][b]坐在这个MC上[/b][/color]”。
进入Mc的编辑状态 , 在 Mc 的 Timeline 的第一帧写上

[quote]this.stop();[/quote]
这里的[color=Red]this[/color]也是Flash的关键字 , 这个 this 指AS所在的这条 Timeline .
现在不管你这个MC放在哪里,命名是什么,我都不管,反正肯定会停下来。为什么,因为AS正“坐在MC上”。
如果你在这里写上
[quote] _root.stop();[/quote]
那就错了。为什么?仔细想想。

这个 this 就是相对路径的关键字之一。你必须要仔细理解它。
另外的一个关键字就是 _parent 。如果你理解了 this , 那么[color=Red] _parent[/color] 并不难理解。举例:
还是哪个假设 房子(_root) , 桌子( mc_zhuozi ) , 书 (mc_shu) 他们的关系是(括号内为mc实例