duplicateMovieClip为复制影片剪辑(mc)语句。这个复制语句在ActionScript中应用十分广泛。通过这个语句的使用,我们可以不费吹灰之力就可以复制出足够多的影片剪辑(只要你的资源够的话)。
我们先来看看duplicateMovieClip的位置。
图3.2.36duplicateMovieClip参数面板
它一共有三个参数框,分别是目标,名称,深度。
duplicateMovieClip参数
【目标】就是我们要复制的原始的影片剪辑。例如我们要复制影片剪辑yourname,那么我们就在目标框中填入yourname。
【新名称】就是我们复制出来的影片剪辑的名称,例如:yourname1。
【深度】就是我们复制出来的影片剪辑的层数级别。较高级别的影片剪辑覆盖较低的影片剪辑。此参数应该是唯一的。
下面我们就来实际应用一下duplicateMovieClip语句,看看它能产生什么惊人效果!
1、复制一个影片剪辑
我们要复制一个影片剪辑,就要先创建一个原始的影片剪辑。好!我们运行Flash,建立元件:名称为name,类别为影片剪辑。
创建新元件
我们可以用按钮来实现这一效果,这样更直观一些。我们建立一个按钮,形状随便一些就可以了。把名称为name的影片剪辑和建立的按钮,分别拖放在主场景的两个层中。点击影片剪辑name实例,给它取一个实例名为name。
设置影片剪辑的实例名
然后点击按钮,在Action面板上加入下列语句:
on(release){//当按钮点击时,执行以下语句
duplicateMovieClip(“name”,”name1”,1);//复制名称为name的影片剪辑,复制出来的影片剪辑名称为name1。深度为1
}
这样,我们就得到了一个复制出来的影片剪辑name1。但是,复制出来的mc在原来的mc的上面,看起来的效果不太直观,我们就用以前介绍过的setproperty语句,设定复制的影片剪辑的属性。Set Property(“name1”,_x,350);
完整的Action为:
on(release){
duplicateMovieClip(‘name”,”name1”,1);
setProperty(“name1”,_x,300);//设定影片剪辑name1的x轴上的坐标为300。
}
2、复制多个影片剪辑
在实际应用中,我们很少用到复制一个影片剪辑的情况。那么要复制多个影片剪辑的时候,我们应该怎样设置呢?好,我们来复制四个影片剪辑。与上例相同,首先制作一个名称为name的影片剪辑和一个按钮。分别放在场景中的两个层中。在属性面板中填入影片剪辑名称name。点击按钮加入ActionScript:
on(elease){//当按钮点击时,程序执行下面的语句。
duplicateMovieClip(“name”,”name1”,1);//复制名称为name的mc,名称为name1,深度为1。(下同)
duplicateMovieClip(“name”,”name2”,2);
duplicateMovieClip(“name”,”name3”,3);
duplicateMovieClip(“name”,”name4”,4);
set Property(“name1”,_x,150);//设置name1的x轴坐标为150。(下同)
set Property(“name2”,_x,250);
set Property(“name3”,_x,350);
set Property(“name4”,_x,450);
}
这样,我们复制出了比较多的影片剪辑了。
添加复制影片剪辑命令
但是,这里面存在一个问题。就是,如果我们复制少一些的影片剪辑的时候,这种Action的写法还可以。如果我要复制30个影片剪辑的时候,按照这种写法就比较麻烦了。有没有解决的方法呢?当然有。计算机不是给我们增加负担的,而是给我们提供捷径的。我们可以利用变量来完成。
3、利用变量复制
我们同样做出一个影片剪辑(名称为name)和一个按钮。分别把他们放到主场景中的两个层中。在属性面板中填入影片剪辑的名称name。给场景中的按钮加入Action:
on(release){
i=1;
while(I<30){
duplicateMovieClip(“name”,”name”+I,I);
setProperty(“name”+I,_x,random(550));
setProperty(“name”+I,_y,random(200));
setProperty(“name”+I,_xscale,random(100));
setProperty(“name”+I,_yscale,random(100));
i=i+1;
}
}
解释如下:
on(release){//当按钮点击时,执行下面的语句。
i=1;//设置变量i等于1。
while(I<30){//作一个循环语句while,条件是当i小于30的时候,进行下面的语句。
duplicateMovieClip(“name”,”name”+i,i);//复制名称为name的mc,复制出来的mc名称为name1,name2……..,把复制出来的mc放到不同的深度。
setProperty(“name”+I,_x,random(550));//设定复制出来的mc的x轴坐标为随机,范围是550。
setProperty(“name”+I,_y,random(200));//设定复制出来的mc的y轴坐标为随机,范围是200。
setProperty(“name”+I,_xscale,random(100));//设定复制出来的mc的x轴标尺为随机100
setProperty(“name”+I,_yscale,random(100));//设定复制出来的mc的y轴标尺为随机100。
i=i+1;//变量i等于i加上数值1。
}
}
设置复制影片剪辑命令
4、利用时间轴
我们可以利用时间轴,制作出复制语句的动态效果。先期准备同上,在这里就不多说了。我们在时间线的第一帧添加Act ion:
i=1;
while(i<20){
duplicateMovieClip("name1","name"+i,i);
setProperty("name"+i,_x,random(550));
setProperty("name"+i,_y,random(150));
setProperty("name"+i,_xscale,random(150));
setProperty("name"+i,_yscale,random(100));
i=i+1;
}
在第十帧插入空白关键帧,并在此帧上添加Action:
gotoAndPlay(1);
利用时间轴制作动态效果
关于Action代码,此例就不一一讲述了,完成。
注 意——是用duplicateMovieClip的时候,其【深度】是唯一的。当复制出来的影片剪辑出现在同一层的时候会覆盖掉。
提 示 ——我们在用duplicate的时候,如果你给所复制的mc与原来mc相同的实例名字的时候,那就是说原来的mc要被复制以后的mc所取代。例如:原始mc的名称为name1,那么,用上面的程序作完后,你就看不到原始的mc的影子了。也可以在语句中加入设置属性语句visible,设置原影片剪辑name为不可见。
技 巧——使用变量,我们可以减小书写代码的工作量。在类似的语句块中,我们应该尽量的使用变量来替代规律的变化。