本类共有 4110 篇文章,今日更新 0

Flash Action Script从头说起五-影片剪辑的复制方法

[ 来源:http://www.91now.com/down/ | 作者: | 时间:2007-5-21 18:16:38 | 浏览: 人次 ]


前面我们讲了影片剪辑的控制和属性设置,相信大多数朋友已经掌握,心中感到很欣慰。也有一些朋友说没找到所有教程,前面没看到的朋友可以登陆我的论坛从头开始,地址:
控制影片剪辑的方法很多,我们用的较多的方法是duplicateMovieClip和attachMovie,它们用于复制和附加影片剪辑,这两个命令可以实现许多效果,如下雨、下雪、满天繁星、棋类、射击游戏等。

还是从实例入手,我们使用duplicateMovieClip方法来实现下雪的效果。OK,Let’ go!
打开Flash MX 22004,新建一个文档,这里为了在论坛显示方便,我将大小设置为480*360,背景为兰色。按Ctrl+F8新建一个元件,名称为雪花,行为选影片剪辑。我们来制作一个简单的雪花元件。选择工具箱直线工具,笔触颜色选白色,笔触高度为3,按住Shift键在场景中绘制一条线段,再在线段两侧分别绘制两条线段,如图5-1所示。
i
max进行初始化。
单击选中时间轴第二桢,在动作面板输入命令
duplicateMovieClip(snow,"snow"+i, i);
//复制雪花
this["snow"+i]._x = random(1200);
//设置雪花出现的X轴坐标
size = (random(10))+5;
this["snow"+i]._xscale = size;
this["snow"+i]._yscale = size;
//设置雪花出现的大小
for (j=1; j<=max; j++) {
//使所有雪花下落
this["snow"+j]._y = this["snow"+j]._y+(random(10))+5;
}
单击选中时间轴第三桢,输入命令
if (i > max) {
i = 1;
} else {
i = i+1;
}
gotoAndPlay(2);
好了,按Ctrl+Enter进行测试吧。

i
max的初始值分别为150,变量max的值用来界定要复制的影片剪辑snow的数目。
第二桢第一句duplicateMovieClip(snow,"snow"+i, i)用来复制影片剪辑实例snow,复制后的实例名为"snow"+i,深度级别为i。关于duplicateMovieClip的用法,官方的解释如下:
duplicateMovieClip(target, newname, depth)
参数
target 要重制的影片剪辑的目标路径。
newname 已重制的影片剪辑的唯一标识符。
depth 已重制的影片剪辑的唯一深度级别。深度级别是重制的影片剪辑的堆叠顺序。这种堆叠顺序很像时间轴中图层的堆叠顺序;较低深度级别的影片剪辑隐藏在较高堆叠顺序的剪辑之下。必须为每个重制的影片剪辑分配一个唯一的深度级别,以防止它替换已占用深度上的 SWF 文件。
说的很清楚,我就不多作解释了。
第二句this["snow"+i]._x = random(1200)用来设置复制后的影片剪辑实例的横坐标。用random(value)函数让它随机出现。random(value)函数返回一个随机整数,此整数介于 0 value 参数中指定的整数减 1 之间。
第三句size = (random(10))+5设置了一个从514之间的一个随机数,用来设置复制的影片剪辑的大小。
其余的语句很简单,不再赘述。

下面我们来学习attachMovie的用法。先来看一个实例

Flash MX 2004,新建一个文档,大小为400*300,背景白色,桢频设为60。第二步:画泡泡,保存为mc,命名为pao。
第三步:再新建一个mc,命名为pp_mc,并设定输出连接名为pp,以便attachmovie调用。在mc的场景中拖入pao,坐标以需要泡泡出现的大体范围为准,我设的是x=98,y=10,pp_mc需要实现泡泡的随机移动,所以,选定pao,打开action面板。代码如下:
onClipEvent (load) {
//设置三个随机变量a,b,c
a = random(20)+30;
b = random(1.5)+1;
c = random(10)+20;
}
onClipEvent (enterFrame) {
this._x = this._x+(a*Math.sin(this._y/c)-this._x)/3;
//设置泡泡的横坐标沿正弦曲线变化
this._y = this._y-b;
//设置泡泡的纵坐标随机递减
this._alpha = this._alpha-0.01;
//设置泡泡的透明度递减
if (this._alpha == 0) {
this.unloadMovie();
//当泡泡透明度为0时卸载泡泡
}
// end if
}

第四步:回到场景,在第一帧上写如下代码
j=0;
//设定控制循环以便产生多个泡泡的变量 j
第五步:在第二帧写如下代码
_root.attachMovie("pp", "pp" + j, j);
//从库里复制泡泡
_root["pp" + j]._xscale = random(70) + 30;
//30%到100%的随机x缩放值
_root["pp" + j]._yscale = _root["pp" + j]._xscale;
//30%到100%的随机y缩放值
_root["pp" + j]._x = 65;
//为泡泡设定x坐标值
_root["pp" + j]._y = 155;
//设定y坐标值

第六步:第三帧代码如下
if (j<10) {
//这个判断为j赋最大值
j = j+1;
} else {
j = 0;
//当j=10时,j返回0值
}
gotoAndPlay(2);

这里补充一点,因为看到论坛里有朋友在问怎样设输出连接名问题。在库中元件pp_mc上右击,弹出快捷菜单,单击链接命令,弹出链接属性对话框,勾选链接中的为动作脚本导出选项,在标识符文本框内输入要链接的元件名pp即可。

我们再来说明一下attachMovie方法的用法:
attachMovie(idName, newName, depth [, initObject])
参数
idName 库中要附加到舞台上某影片剪辑的影片剪辑元件的链接名称。这是在“链接属性”对话框中的“标识符”字段中输入的名称。
newname 附加到该影片剪辑的影片剪辑实例的唯一名称。
depth 一个整数,指定 SWF 文件所放位置的深度级别。
initObject (Flash Player 6 和更高版本支持)包含要用来填充新附加的影片剪辑的属性的对象。此参数使动态创建的影片剪辑能够接收剪辑参数。如果 initObject 不是对象,则将被忽略。initObject 的所有属性均将复制到新实例中。构造函数可使用通过 initObject 指定的属性。此参数是可选的。
好了,今天就讲到这里吧。


广告位