当前位置: 首页 > 图文教程 > Flash动画 > ActionScript > Flash as入门(10):影片剪辑的深度

ActionScript
FLASH AS3与网页JS参数值传递的问题
Flash AS3的parameters对象处理网页参数
Flash教程 认识Flash ActionScript的环境
Flash ActionScript编程基础
Flash AS3代码实现鼠标跟随喷枪涂鸦效果
falsh 跨域调用配置
Flash AS3.0 实例教程 喷泉动画特效
AS3 Loader与URLLoader的比较
ColorTransform类调整显示对象的颜色值
Flash AS3 快速制作烟雾动画
Flash AS3 制作文字飞出动画
ActionScript 学习小心得
ActionScript3.0读取网页FlashVars中的参数的问题
通过实例学习AS3.0:案例三
通过实例学习Flash AS3.0:案例四
通过实例学习Flash AS3.0:案例五
通过实例学习Flash AS3.0:案例六
Flash教程:认识Flash ActionScript的环境
Flash as入门(1):认识AS面板
Flash as入门(3):AS基本语法

ActionScript 中的 Flash as入门(10):影片剪辑的深度


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

本例继续讲解AS的基础知识,今天我们来学习Flash AS入门系列教程第七课第四节:影片剪辑的深度,对Flash的AS编程有兴趣的朋友可以到论坛与作者交流。

第4节 MC的深度

在flash创作环境中我们对层的概念已经比较熟悉了。深度与层的概念比较接近。每一个在舞台上的对象都有它自已的深度,深度数字大的盖住比它小的对象,这就象上面的层遮住下面的层一样。我们可以把MC放到-16384 至 1048575的任一深度上,但某一深度上原来已有一个对象时,那么新放入的对象将替换原来的对象。这可能会遇到一个问题,当我用使用 attachMovie(MovieClip.attachMovie 方法)、duplicateMovieClip(MovieClip.duplicateMovieClip 方法)或 createEmptyMovieClip(MovieClip.createEmptyMovieClip 方法)在运行时创建影片剪辑时,始终要指定MC的深度。应该用个什么深度值呢?如果指定的深度值上已有MC了,会不会将原来的覆盖了呢?为了解决这个问题,flash 为我们提供了getNextHighestDepth()方法。

getNextHighestDepth()方法:MC的这个方法将返回下一个可用的深度值。更好的的理解就是当前最大的深度值加1。因此用这个深度值,MC将在最上面。

比如:this.createEmptyMovieClip("my_mc",this.getNextHighestDepth());
getInstanceAtDepth()方法:这个方法将返回某个特定深度值上的MC实例。

比如要确定当前最大深度值的MC,可以用如下代码:
var zddepth = this.getNextHighestDepth()-1; //获得当前最大的深度值
var my_mc:MovieClip =this.getInstanceAtDepth(zddepth);
getDepth()方法:返回某个MC的深度
比如要返回MC,my_mc的深度:
var mymcdepth = my_mc.getDepth();
swapDepths()方法:交换两个MC的深度值,如果MC正在执行补间,则补间会停止。
比如有两个MC:mc1和mc2,现在要交换这两个MC的深度
mc1.swapDepths(mc2);

下面通过一个练习来熟悉本节课所介绍的内容。

效果如下:用鼠标点击挡在下面的图片,这张图片将移到最上面一层来。

制作方法:

1.新建一flash文档,导入若干图片。
2.将这些图片分别做成MC,大小随意,但宽高不应超过200或可再小一些。在库中分别右击这些MC,点击“连接”,在弹出的面板中,在为ActionSpript导出前打钩。在标识框内输入:pic1.第二个MC则输入pic2,以此类推。
3.回到主场景,打开动作面板,输入下列代码:(注意下面的代码是以5张图片为例写的,如果你不是5张图片则应作相应修改,详细说明看后面的代码分析)

for(i=1;i<6;i++){

this.attachMovie("pic"+i,"pic"+i+"_mc",this.getNextHighestDepth());
var pic_mc = eval("pic"+i+"_mc");
pic_mc._x = 150 +random(200);
pic_mc._y = 100 + random(200);
}
pic1_mc.onRelease = function(){
var zddepth =_root.getNextHighestDepth()-1;
var zd_mc:MovieClip =_root.getInstanceAtDepth(zddepth);
this.swapDepths(zd_mc);
}
pic2_mc.onRelease = function(){
var zddepth = _root.getNextHighestDepth()-1;
var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth);
this.swapDepths(zd_mc);
}
pic3_mc.onRelease = function(){
var zddepth = _root.getNextHighestDepth()-1;
var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth);
this.swapDepths(zd_mc);
}
pic4_mc.onRelease = function(){
var zddepth = _root.getNextHighestDepth()-1;
var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth);
this.swapDepths(zd_mc);
}
pic5_mc.onRelease = function(){
var zddepth = _root.getNextHighestDepth()-1;
var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth);
this.swapDepths(zd_mc);
}

代码分析:

首先用一个for循环,将库中的图片加载到舞台上,循环次数是你的图片元件的数量,下面i<6中的6用你的图片元件数量加1替换。我这里是5张图片,所以我用6。

for(i=1;i<6;i++){
接下来加载这些图片元件,这里加载的深度我们用到了this.getNextHighestDepth()方法。图片加载后指定图片的x,y坐标在一定的范围内随机的位置。这个范围应根据图片元件的大小来确定,不能太小,太小了,上面的图片会完全盖住下面的图片。也不能太大,太大了则不能产生重叠效果。总之就是要即要产生重叠效果,又不能完全盖住。
this.attachMovie("pic"+i,"pic"+i+"_mc",this.getNextHighestDepth());
var pic_mc = eval("pic"+i+"_mc");
pic_mc._x = 150 +random(200);
pic_mc._y = 100 + random(200);
现在图片已加载到舞台上了,并产生了不完全重叠效果。接下来就是实现点击图片让该图片移到最上层,所以用到图片MC的onRelease事件,以第一张图片为例:
pic1_mc.onRelease = function(){
在这个事件执行中首先确定最上面的图片的深度值。上面介绍了getNextHighestDepth()返回的是最大的深度值加1,那么最大的深度值自然就是getNextHighestDepth()减1了。
var zddepth = _root.getNextHighestDepth()-1;
有了最大的深度值后,就可以确定最上面的图片是哪张了:
var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth);
最后将这张图片与最大深度那张图片交换深度,那这张图片深度值就最大了,当然也就在最上面了:
this.swapDepths(zd_mc);
第一张图片的点击动作代码就完成了。下面写第二张图片的代码,因为每张图片点击事件中的代码是完全一样的,所以复制第一张图片的代码,粘帖到第一张图片代码的下面,将第一句pic1_mc.onRelease = function(){中的pic1改为pic2,就行了。

以后的以此类推,直到完成所有的图片的点击代码。