这篇教程为“Flash AS 入门教程”的一部分。查看全套教程>>>>。
本节应掌握的知识要点:
①duplicateMovieClip和removeMovieClip应用;②_visible属性应用;③数组应用。
复制影片剪辑语句duplicateMovieClip也是在Flash AS 中应用非常多的语句,许多精彩的特效都离不开这个语句,其语法格式如下:
duplicateMovieClip(目标, 新名称, 深度)
“目标”参数为要进行复制的目标影片剪辑。
“新名称” 参数为新复制的影片剪辑的唯一标识符。
“深度” 参数为新复制的影片剪辑的唯一深度级别。
removeMovieClip是与duplicateMovieClip经常配合使用的语句,其作用是用来删除指定的影片剪辑,格式如下:
removeMovieClip(目标)
“目标”参数为用 duplicateMovieClip() 创建的影片剪辑实例的目标路径。或者是用 MovieClip.attachMovie() 或 MovieClip.duplicateMovieClip() 创建的影片剪辑的实例名称。
这一节还要用到一个“_visible”属性,它返回的是一个用“true”或者“false” 表示的布尔值,用于指令特定的影片剪辑或者按钮对象可见还是不可见,rue为可见,false为不可见。也可以用1或者0表示,1表示可见,0表示不可见。
请看示例动画“实例1-6”。
实例1-6 复制和删除“影片剪辑”
初始的画面上没有任何动画效果,当我们点击“play”按钮后,就会依次从场景左侧跳出5只小松鼠,奔跑一个来回后排列在场景左侧原地跳跃。当我们再一次点击“play”按钮,会看见5只小松鼠再一次从场景左侧依次跳跃出来,同时场景上原地跳跃的小松鼠会一一消失。这个效果就是应用了“duplicateMovieClip”语句实现的。
打开源文件,分析一下影片结构,主场景上有10帧,3个图层,图层1上是按钮和背景,图层2上有一只放置在场景左上角的实例名为shu_mc的小松鼠影片剪辑,进入这个小松鼠的编辑场景,可以看到是一个120帧的补间动画,第1-60帧,小松鼠由场景左侧运动到右侧,第61-120帧,再由右侧回到左侧,第120帧上有一个stop动作,令小松鼠运动一个来回后停留在场景左侧。
看看主场景“as”图层上设置的动作:
第1帧上的动作:
stop();
_root.shu_mc._visible=0
第2帧上的动作:
x = 0;
y = 0;
第3帧上的动作:
x = x+1;
if (x<=5) {
duplicateMovieClip(shu_mc, "shu_mc" + x, x);
_root["shu_mc" + x]._x = _root.shu_mc._x+(-15*x);
_root["shu_mc" + x]._y = _root.shu_mc._y+(30*x);
}
第10帧上的动作:
if (x<=5) {
gotoAndPlay(3);
} else {
stop();
}
“play”按钮上的动作:
on (release) {
gotoAndPlay(2);
}
“删除mc”按钮上的动作:
on (release) {
if (x>5) {
y = y+1;
removeMovieClip("shu_mc"+y);
}
}
第1帧、第2帧和第10帧上的语句是我们已经学习过的,现在先来认识一下第3帧上i大括号“{}”里面的三行语句。
duplicateMovieClip(shu_mc, "shu_mc" + x, x);小括号“()”里定义了三个参数:
shu_mc为要进行复制的目标影片剪辑对象。
"shu_mc"+x 为新复制的影片剪辑的唯一标识符,这个标识符是由字符串“shu_mc”连接上通过运算取得的x的值得来的,即新复制出的影片剪辑名称依次为shu_mc1、shu_mc2、……shu_mc5,在这里加号“+”是连接符,shu_mc+x也可以写成shu_mc add x。
后面一个参数x为新复制的影片剪辑的深度级别,在这里依次为1、2、3、4、5。在同一时间线上,每一个新复制的影片剪辑占用一个唯一的深度级别,并层层堆叠,如果后复制出的影片剪辑与前面复制出的影片剪辑深度级别相同就会覆盖并替换掉前一个影片剪辑,所以必须为每一个新复制的影片剪辑分配一个唯一的深度级别。
_root["shu_mc" + x]._x = _root.shu_mc._x-15*x;
_root["shu_mc" + x]._y = _root.shu_mc._y+30*x;
这里又出现了一个新的运算符,方括号“[ ]”是数组运算符,里面的参数为相同类型的一组数据,本节接触的_root["shu_mc" + x]只是数组运算的一种形式,在这里方括号“[ ]”里运算的结果即为shu_mc1、shu_mc2、……shu_mc5。在这里使用数组可以动态的给_x、_y属性赋值。
赋值符号“=”右边的表达式以父本shu_mc影片剪辑的x、y位置为依据,计算出每一个新复制的影片剪辑的相应坐标位置,实际效果是x坐标左移15*x像素,y坐标下移30*x像素。
现在我们来分析一下这些语句的执行流程及功能:
第1帧上的两行语句是前面学过的,影片一开始播放,就停止在第一帧,并由第二行语句设置场景上的shu_mc影片剪辑的_visible属性为0,即不可见。所以当影片开始播放时,看不见主场景上左侧那只小松鼠。
第2帧定义了两个变量x、y,并分别为其赋予初始值为0。
第3帧是这一节的关键,第1行语句设置变量x的值为x+1,当播放头第一次到达第3帧时,这时x=0+1,即x的值为1。
接下来,在if语句块里,设置了一个条件,当(x<=5)时,执行大括号“{}”语句块里的复制影片剪辑的语句。由于当前x的值为1,符合条件,这时复制出第一个名称为“shu_mc1”、层深度为“1”的小松鼠影片剪辑,并以父本小松鼠的位置为依据左移15*1像素、下移30*1像素出现在场景中,由于每一个新复制出的影片剪辑都会从自身时间轴的第1帧开始完整的播放,所以这时我们看到第一只小松鼠跑了出来,在场景上奔跑了一个来回后停止在场景左侧原地跳跃,即从shu_mc影片剪辑的第1帧运行到第120帧然后停止下来。
播放头前进到第10帧,又有一个判断条件,如果x<=5则跳转到第3帧并播放,否则就停留在第10帧。当符合条件再一次跳转到第3帧时,这时x的值为2了,于是又复制出名称为“shu_mc2”、层深度为“2”的第二只小松鼠影片剪辑,并以父本小松鼠的位置为依据再左移15*2像素、下移30*2像素出现在场景中,我们看到第二只小松鼠跑了出来,在场景上奔跑一个来回后停止在场景左侧原地跳跃。
按照设定的条件反复判断,当超出了x<=5的条件时,播放头便停留在第10帧上了。
这时,场景上复制出的5只小松鼠都完成了各自时间轴上120帧的运动后在场景左侧按照各自的x、y位置排列原地跳跃。
as图层上的语句执行完了。
这时,当我们点击“删除mc”按钮,y的值为1,removeMovieClip("shu_mc"+y)为removeMovieClip(shu_mc1),shu_mc1影片剪辑被删除,继续点击,就会依次将shu_mc2、……shu_mc5一一删除。
当我们再次点击场景右下角的“play”按钮,播放头将跳转到第2帧并播放,x和y重置为0,再次重复上一次的复制过程。
如果复制完成5只小松鼠后,我们不点“删除mc”按钮而再次直接点击“play”按钮,这时就会看到,每复制出一只小松鼠,相同层深上的那一只小松鼠立即消失掉,这就是我们上面所讲的“新复制出的影片剪辑与前面复制出的影片剪辑深度级别相同就会覆盖并替换前一个影片剪辑”。
关于复制出的影片剪辑的层深度问题,我们再用一个直观一点的示例来加深理解,请看实例1-7。
实例1-7 层深度理解
场景上共两帧,第1帧设定作为复制父本的 “yuan_mc”影片剪辑不可见,定义一个变量“x”,并设定其初始值为“0”;第2帧设置stop让播放头停留在该处,等待按钮事件来控制下一步的动作。每点击一次“复制mc”按钮,就会按照设定的条件以及设定的属性值复制出一个新的影片剪辑,并依次根据x的值命名为yuan_mc1、yuan_mc2、……、yuan_mc5,可以清楚的看见,复制出的影片剪辑各自占用一个唯一的特定深度层,深度层根据x的值依次为1、2、3、4、5,后复制出的影片剪辑总是叠放在先复制出的影片剪辑的上面一层,当按照设置的条件复制出5个mc后, 再继续点击“复制mc”按钮又会依次复制出yuan_mc1、yuan_mc2、……、yuan_mv5,再次复制出的影片剪辑依然占用1、2、3、4、5深度层,这时相应深度层上原有的影片剪辑就被替换掉了。
复制影片剪辑的语句也可以用点语法“.”的格式来写:
例如:duplicateMovieClip(shu_mc, "shu_mc" + x, x);
可以写成:shu_mc.duplicateMovieClip("shu_mc" + x, x);
课后练习:素材源文件下载
用提供的课后练习素材源文件,在相应的关键帧和按钮上添加语句,实现如下效果:
1. 点击“复制mc”按钮由下至上逐一复制出5个椭圆,位置如练习6所示;
2. 点击红色“删除mc”按钮,由下至上逐一删除复制出的椭圆;
3. 点击黄色“删除mc”按钮,由上至下逐一删除复制出的椭圆。
提示:设置的坐标和调整缩放比例,可根据效果测试一个合适的值,不要求和示例效果一模一样。
课后练习1-7效果
这篇教程为“Flash AS 入门教程”的一部分。查看全套教程>>>>。
Flash AS 入门 duplicateMovieClip和removeMovieClip应用
原文:http://www.jb51.net/flash/actionscript/75298.html