FLASH脚本7

7、FLASH脚本-复制影片剪辑、深入 startDrag()与 stopDrag()、for循环  十九、复制影片剪辑duplicateMovieClip()函数
duplicateMovieClip()函数的作用是通过复制创建的影片剪辑的实例。在 Flash作品中常见的
倾盆大雨、雪花飘飘、繁星点点等动画特效,就是利用 duplicateMovieClip()函数的功能来
实现的。
脚本位置:全局函数|影片剪辑控制|duplicateMovieClip
语法格式: duplicateMovieclip(目标、新实例名称、深度);
参数意义:
? 目标:target:Object - 要复制的影片剪辑的目标路径。此参数可以是一个字符串(例如
"my_mc"),也可以是对影片剪辑实例的直接引用(例如 my_mc)。能够接受一种以上数据
类型的参数以 Object 类型列出。
? 新实例名称:newname:String- 所复制的影片剪辑的唯一标识符。
? 深度:depth:Number - 所复制的影片剪辑的唯一深度级别。深度级别是所复制的影片剪
辑的堆叠顺序。这种堆叠顺序很像时间轴中图层的堆叠顺序;较低深度级别的影片剪辑隐藏
在较高堆叠顺序的剪辑之下。必须为每个所复制的影片剪辑分配一个唯一的深度级别,以防
止它替换已占用深度上的 SWF 文件。
函数:当 SWF 文件正在播放时,创建一个影片剪辑的实例。无论播放头在原始影片剪辑
中处于什么位置,在重复的影片剪辑中,播放头始终从第 1 帧开始。原始影片剪辑中的变
量不会复制到重复的影片剪辑中。
在使用 duplicateMovieClip()函数时,需要注意以下几点。
(1)复制得到的影片剪辑保持父级影片剪辑原来的所有属性,所以,原来的影片剪辑是静
止的,复制后的影片剪辑也是静止的,并且一个叠放在另一个上。如果不给它们设置不同坐
标,就只能看到编号最大的影片剪辑复本,而看不出复制的效果。
(2)原来的影片剪辑在做补间运动,那么复制品也要做同样的运动,并且无论播放头在原
始影片剪辑(或“父”级)中处于什么位置,复制的影片剪辑播放头始终从第上帧开始。所以,
复制品和原影片剪辑始终有个时间差,因此,即使不给复制得到的影片剪辑实例设置坐标,
也可以看到复制品在运动。
( 3 ) 复制得到的影片剪辑实例经常要与影片剪辑属性控制 ( 特别是
_x,_y,_alpha,_rotation,_xscale,_yscale等属性的控制)结合才能更好地发挥复制效果。
removeMovieClip()函数
通过 duplicateMovieClip()函数产生的实例可以通过removeMovieClip()函数进行删除 。
removeMovieClip()函数的一般形式为:
removeMovieClip(实例名)
复制与删除)
(1) 在舞台上绘制一朵小花,按 F8 键转化为影片剪辑元件。并建立实例名“mc” 。
(2) 插入“图层 2”在此图层的第 1 帧输入代码:
var i=0
在场景中建立两个按钮,(复制按钮和删除按钮)。分别在两个按钮上输入代码:
on (press) {
i++;
if (i<=12) {
duplicateMovieClip("mc", "mc"+i, i);
} else {
i = 12;
}
_root["mc"+i]._x = 275+120*Math.sin(i*1/6*Math.PI);
_root["mc"+i]._y = 180+120*Math.cos(i*1/6*Math.PI);
}
on (press) {
if (i>=1) {
removeMovieClip("mc"+i);
} else {
i = 1;
}
i--;
}
attachMovie()
脚本位置:ActionScript 2.0 影片|MovieClip
|方法|attachMovie
语法格式: attachMovie(目标, 新实例名, 深度, [对象参数])
说明:这条语句中的四个参数,第四个参数是可选,如果不使用第四个参数,那么它的参数
设置同 duplicateMovieClip()是一样的,但也有一点区别,在 attachMovie()函数中的第一
个参数只能是字符串类型。而 duplicateMovieClip()的第一个参数,可以是一个字符串,也
可以是对影片剪辑实例的直接引用。
attachMovie()语句与 duplicateMovieClip()相比,优点是 attachMovie()复制的“目标”是 库中
要附加到舞台上某影片剪辑的影片剪辑元件的链接名称。 这是在 “链接属性” 对话框中的 “标
识符”字段中输入的名称。
在上例中我们可以这样来什么时候修改
(1) 把舞台上小花实例删除。
(2)打开库,右键单击库中的花实例,在弹出的链接属性对话框中,把作为 Actionscript 导
出选项选中,在标识符栏输入“mc” 。
在复制按钮上把语句改为:
on (press) {
i++;
if (i<=12) {
attachMovie("mc", "mc"+i, i);
} else {
i = 12;
}
_root["mc"+i]._x = 275+120*Math.sin(i*1/6*Math.PI);
_root["mc"+i]._y = 180+120*Math.cos(i*1/6*Math.PI);
}
梅花
(1) 打开素材源文件。 打开库, 分别右键点击落三朵梅花, 在链接属性对话框中输入
标识符 “h0” 、 “h1” 、 “h2”.
(2)分别进入小花影片剪辑编辑区,在最后一帧添加语句: stop();
(3)选中场景中的梅枝影片剪辑元件,打开动作面板添加代码:
on ClipEvent (load) {
var i = 0;
}
on (press) {
i++;
var n = random(3);
attachMovie("h"+n, "mc"+i, i);
this["mc"+i]._x = this._xmouse;
this["mc"+i]._y = this._ymouse;
this["mc"+i]._rotation = random(5)*(120);
}
奇妙的线条
(1) 新建一个名称为“线”的的影片剪辑元件。进入其编辑区里,在第一帧上绘制一条笔
触高度为 1 长为 150 的白色线条。利用对齐面板,左对齐、垂直中齐。
(2) 分别在第 10 帧、第 20 帧、第 30 帧、第 40帧插入关键帧。并改变第 10 帧,第 20
帧、第 30 帧上线条的着颜色,然后再把第 1 帧和第 20 帧、第 40 帧上的线条改为线
(3) 新建一个名称为“复制线条”的影片剪辑元件。进入“复制线条”的影片剪辑元件编
辑区里,在“图层 1”的第 1 帧,从库里提进“线条”影片剪辑元件。左对齐、底对齐。
在属性面板里输入实例名“line” 。
(4) 插入“图层 2” ,在此图层写 AS:
第一帧上的 AS:
var i = 0;
line._visible = 0;
第二帧上的 AS:
i++;
duplicateMovieClip("line", "line"+i, i);
this["line"+i]._rotation = i*3;
this["line"+i]._x = 0
this["line"+i]._y =0
第四帧上的 AS:
if (i<120) {
gotoAndPlay(2);
} else {
stop();
}
说明:在第一帧上初始化变量,在第二帧上复制线条,在第四帧上控制雪花的复制数量,如
果不加控制,就会造成死循环,最后死机。第三帧上的语句可以解释为:如果 i<120 就跳
转到第二帧,继续复制,否则就跳转到第一帧,重新复制。这种三帧循环用得很多,大家一
定要掌握。
(5) 回到主场景,从库里提出复制线条影片剪辑元件。测试影片。
       二十、深入 startDrag()与 stopDrag()
startDrag()函数
脚本位置:全局函数|影片剪辑控制|startDrag
语法格式:startDrag(target:Object, [lock:Boolean, left:Number, top:Number,
right:Number, bottom:Number]) : Void
即: startDrag(目标,固定,左,上,右,下)
参数意义:目标(target)表示要拖动的影片剪辑的目标路径。
固定(Lock)是一个布尔值,指定的可拖动影片剪辑是锁定到鼠标指针位置中央(true),还
是锁定到用户首次单击该影片剪辑的位置上(false)。此参数是可选的。
Lefk、top、 right、 bottom、这四个参数分别设置影片剪辑拖动在左、上、右、下的范
围,注意相对于影片剪辑父级坐标的值,这些值指定该影片剪辑被约束的矩形。这些参数
是可选的。
函数功能:startDrag()函数的作用是使影片剪辑实例在影片中播放过程中可拖动。
stopDrag()函数
脚本位置:全局函数|影片剪辑控制|startDrag
语法格式:stopDrag()
函数功能:停止当前的拖动操作。
理解 startDrag()函数中参数的作用
制作步骤
(1)在舞台上任意绘制一个图形,选中图形,单击“修改”|“转换为元件”
命令,把图形转换为影片剪辑元件。
(2)选中舞台上影片剪辑元件,在属性面板的影片剪辑的”实例名称”中填入 mc。
(3)单击“窗口”|“其它面版”|“公用库”|“按钮”命令,打开公用库面板,从中选择
按钮拖放到舞台中。
(4)分别在按钮中添加如下 AS:
第 1 个按钮中的 AS 为:
on (release) {
startDrag(_root.mc);
//实现 mc的鼠标跟随.。效果是元件与鼠标有间隔。
}
第 2 个按钮中的 AS 为:
on (release) {
startDrag("_root.mc", true);
//是否锁定参数为真。元件与鼠标无间隔。
}
第 3 个按钮中的 AS 为:
on (release) {
startDrag("_root.mc", true, 0, 0, 550, 400);
//宽 550 高 400 的矩形范围内拖动
}
第 4 个按钮中的 AS 为:
on (release) {
startDrag("_root.mc", true, 0, 100, 550, 100);
//宽 0 高为 200 的线型范围。
}
第 5 个按钮中的 AS 为:
on (release) {
stopDrag();
//停止 startDrag()
}
(5)、保存测试影片,单击不同的按钮所产生的不同效果。注意第4个按钮按下后就只能点
第 5 个按钮,之后才能点击其它按钮.想想这是什么原因?
说明:startDrag()可以作为影片剪辑的方法,上面示例的语句也可以这样来写:
以第 1 个按钮为例:
on(release){
mc.startDrag();//实现 mc的鼠标跟随.无参数。效果是元件与鼠标有间隔。
幻影泡泡
1. 运行 Flash 8,背景色为黑色,其它默认。
2. 新建一个名为“泡泡图”的图形元件。在其编辑区里绘制一个直径为 100 的正圆,填充
颜色
3.新建一个名为“泡泡”的影片剪辑元件,在其编辑区“图层 1”的第 1 帧库里提进图形
元件“泡泡图”居中对齐。接下来在第 12 帧,第 19 帧插入关键帧,并在第 1 帧上把泡
泡大小设为:48×48,alpha 值为:50%,第 12 帧上,大小:60×60,alpha 值为:100%。
第 19 帧上,大小:80×80,alpha 值为 0。创建动作补间动画。在 20 帧上插入控白关键
帧加上停止命令:stop();。
4. 新建一个名为鼠标的影片剪辑元件, 在其编辑区里绘制一个鼠标图形。 插入 “图层
2” ,
把“图层 1”的第 1帧复制粘贴到“图层 2”的第 1 帧上,并在此帧上改变填充效果。
分别在两个图层的第10 帧插入帧。
插入图层 3,在图层 3 上绘制一个如图 12-5 所示的矩形条,组合,在第 10 帧上插入关
建帧,把矩形条移至鼠标图的右下方,如图 12-6 所示。创建补间动画。并把图层 3 设为遮
罩。
5.回主场景,在主场景的第 1 帧上,从库里提进“泡泡”影片剪辑元件,输入实例“mc” 。
插入“图层 2” ,在“图层 2”的第 1 帧上,从库里提进“鼠标”影片剪辑元件,输入实
例“ms” 。
并选中此实例,打开动作面板输入 AS 代码:
on ClipEvent (load) {
k = 1;
startDrag(_root.ms, true);
Mouse.hide();//隐藏指针
}
on ClipEvent (enterFrame) {
k++;
if (k>20) {
k = 1;
}
duplicateMovieClip("_root.mc", "mc"+k, k);
msx = getProperty(_root.ms, _x);
msy = getProperty(_root.ms, _y);
setProperty(_root.mc, _x, msx-25);
setProperty(_root.mc, _y, msy-30);
}
6.制作完毕,测试保存。
提示:Mouse.hide();//隐藏指针
脚本位置:ActionScript2.0 类|影片|Mouse| hide(Mouse.hide 方法)
拼图游戏
1.导入一张图片到舞台,调整好大小。选中图片,执行“修改菜单”下的“分离”命令,
然后用“直线工具”把图片 12 等分。
2.分别选左上角的第一份,按 F8 键转化为影片剪辑元件,在“转换为元件”对话框中设
置元件名为图 1,注册点居中。然后在属性面板里建立实例名为: “mc1” 。
3.选中此影片剪辑元件,打开动作面板,输入如下代码:
on (press) {
this.swapDepths(getNextHighestDepth());
startDrag(this, true);
}
on (release, rollOut) {
stopDrag();
}
4.用同样的方法制作另外的 11 个影片剪辑。
5.制作好后,把场景中的各影片剪辑位置打乱,放在舞台的右边。
6.插入“图层 2” ,在些图层的左上角放上原图的缩略图。作为拼图时的参考。
代码解释:
(1)swapDepths(MovieClip.swapDepths 方法)
脚本位置:ActionScript2.0 类|影片|MovieClip|swapDepths
功能:交换此影片剪辑与另一影片剪辑的堆栈或深度级别(z-顺序),另一影片剪辑由 target
参数指定,
或指定为当前占用由 target 参数指定的深度级别的影片剪辑。两个影片剪辑必须具有相同
的父级影片
剪辑。
my_mc.swapDepths(depth/target);

my_mc1.on Release=function(){
this.swapDepths(1);
}
my_mc2.on Release=function(){
this.swapDepths(my_mc1);
}


getNextHighestDepth()


my_mc.getNextHighestDepth();

my_mc._parent.getNextHighestDepth();
(2)getNextHighestDepth(MovieClip.getNextHighestDepth 方法)
脚本位置:ActionScript2.0 类|影片|MovieClip| 方法|getNextHighestDepth
功能:以确保 Flash 将该影片剪辑呈现在当前影片剪辑中同一级和同一层上所有其它对象
的前面。
以上两条语句大家想进一步了解,请查看帮助。
示例 12-4 滑条控制
滑条控制是一种很有用的控制方法,比如在 MP3 播放器中,用滑条来控制音量、声道等。下
面我们介绍
一个简单的滑条控制
(1) 打开素材
(2) 双击库中的“滑快 1”影片剪辑元件,进入其编辑区,选中按钮,打开动作面板,添
加代码:
on (press) {
startDrag(this, true, -50,0 , 50, 0);
}
on (release, dragOut) {
stopDrag();
}
(3)双击库中的“滑快 2”影片剪辑元件,进入其编辑区,选中按钮,打开动作面板,添
加代码:
on (press) {
startDrag(this, true, 0,-50 , 0, 50);
}
on (release, dragOut) {
stopDrag();
}
(4)分别进入“横控制条”和“纵控制条”两个影片剪辑元件的编辑区,分别给两个滑块
建立实例名称:
“h_mc1” 和“h_mc2” 。
(5)在场影中给横控制条命名实例名“xbut” ,给横控制条命名实例名“ybut” 。给红
色正方形元件命名实
例名“mc” 。
(6)场景中的动态文本,按从上到下的顺序,在属性面板里依次输入实例名“a_txt” 、
“b_tat” 、 “c_txt” 。
(7)选中红矩形影片剪辑元件,打开用作面板,添加代码:
on ClipEvent (enterFrame) {
dx = _root.xbut.h_mc1._x;
dy = _root.ybut.h_mc2._y;
xx = _root.mc._width=dx+100;
yy = _root.mc._height=dy+100;
_root.a_txt = xx;
_root.b_txt = yy;
_root.c_txt = Math.round(xx*yy);
}
       二十一、for循环
for 循环语句是功能最强大,使用最灵活的一种循环语句,它不仅可以用于循环次数已经确
定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况。
脚本位置:语句|条件/循环|for
语法格式:for(初始表达式;条件表达式;递增(或递减)表达式){语句块//或者称循环
体}
参数意义:
? 初始表达式: 一个在开始循环序列前要计算的表达式, 通常为赋值表达式。 此参数还
允许使用 var 语
句。为赋值表达式时。推荐使用 var 可以使运行加快。其原理主要是使用了本地变量。
? 条件表达式: 计算结果为 true 或 false 的表达式。在每次循环迭代前计算该条件;当
条件的计算结果为 false 时退出循环。
? 递增(或递减)表达式: 在每次循环迭代后要计算的表达式;通常为使用 ++(递增)
或 --(递减)运算符的赋值表达式。
? 语句块。在大括号内的所有指令组。统称循环体。
说明:for 语句中的三个表达式,中间用分号隔开。第一个初始表达式通常用来设定语句循
环执行次数的变量初值,这个表达式只会执行一次; 第二个条件表达式通常是一个关系表达
式或者逻辑表达式, 用来判定循环是否继续; 第三个递增表达式是每次执行完 “循环体语句”
以后,就会执行的语句,通常都是用来增加或者减少变量初值。
for 语句的执行流程图for 求和
(1) 在场景中制作一个如图的界面(2) 在属性面板里分别给三个动太文本输入为量名“a_txt” 、 “b_txt” 、 “c_txt”
(3) 选中按钮,打开动作面板,添加代码:
on (release) {
k1 = 0;
k2 = 0;
a_txt = 0;
b_txt = 0;
c_txt = 0;
for (i=1; i<=100; i += 2) {
k1 += i;
k2 += i+1;
a_txt = k1;
b_txt = k2;
c_txt = k1+k2;
}
}
注意:
1.用类似形式可以方便的控制循环的次数,此例中,100 就是循环的次数。
2. 循环体内可以使用”i”的值参与运算。有时这种参与是非常必要的。
3. 三个表达式内部用“;”分割。
提示:
(1)for 循环结构的原理如下,它首先计算一次表达式 1,然后按照以下顺序开始循环序
列:只要表达式 2 的计算结果为 true,就执行循环体,然后计算下一个表达式。
使用 for 循环语句的注意事项
1.为了使程序效率更高,在初始表达式中使用 var 关键字来声明变量。
2.在初始表达式中可以定义多个变量,两个表达式中间用逗号(,)分开,如:
for (var i = 1, sun = 0; i<=100; i++) {
sun = sun+i;
}
trace(sun);
3.初始表达式也可以省略,但必顺在 for 语句前初始化变量,如:
var i=0
var sun = 0;
for (; i<=100; i++) {
sun = sun+i;
}
trace(sun);
注意:当省略初始表达式时,其后的分号不能省略。
4.递增表达式也可以省略,但必顺保正循环能正常结速,如:
var sun = 0;
for (var i = 0; i<=100; ) {
sun = sun+i;
i += 1;
}
trace(sun);
5.for 语句中可以同时省略初始表达式和递增表达式,如:
var i=1
var sun = 0;
for (; i<=100;) {
sun = sun+i;
i+=1;
}
trace(sun);
这时程序和 while 完全一样,所以可以用 for 来代替 while 语句,也就是说 for 语句的功
能比 while 语句强大得多。
烟花
本例是实现一个烟花效果。鼠标点击后,会绽放一朵灿烂烟花。而烟花由小流星复制而成。
复制的个数由循环语句来控制的。
1.新建文档,背景黑色。其它默认。
2.新建一个名为“礼花 1”的影片剪辑元件,在此元件的第 1 帧绘制一个流星式的图形。
3.在第 10 帧处插入关键帧,把绘制的图形右移,并适当放大。
4.在第 19 帧插入空白关键帧,任意绘制一个图形,位置相对第 10 帧上的图形的右移
5.创建每两关键帧之间的形状补间动画。
6.在库中右键点击“烟花 1”影片剪辑元件,在快捷菜单中选择“链接”选项,在弹出的
“链接属性”对话框中输入标识符 yh1
7.在库中右键点击“烟花 1”影片剪辑元件,在快捷菜单中选择“直接复制 ”选项,在弹
出的“直接复制元件”的对话框中把元件名改为“烟花 2” 。
8.用同样的方法在制作另一朵烟花,(颜色与式样最好以第一朵有所区别)并设置标认符为
“yh2” 。
9.导入一个烟花声音文件到库,右键点击声音文件,在快捷菜单中选择“链接”选项,在
链接属性对话框中设置声音标识任为“Sound” 。
10.建立一个空影片剪辑,拖入场景。场景中它显示为一个空心小白点。用“黑箭头工具”
选中该小白点,打开动作面板,添加 AS 代码:
on ClipEvent (load) {
var k = 1;
mySound= new Sound();//创建一个声音对象
mySound.attachSound("Sound");//把库中的声音文件附加到所创建的声音对象上
}
on ClipEvent (mouseDown) {
k=-k;
mySound.start();//播放声音
for (var i = 1; i<=100; i++) {
if (k == 1) {
this.attachMovie("yha", "yh"+i, i);
} else {
this.attachMovie("yhb", "yh"+i, i);
}
this["yh"+i]._x = _xmouse;
this["yh"+i]._y = _ymouse;
this["yh"+i]._rotation = random(360);
this["yh"+i]._xscale = random(50)+10;
this["yh"+i]._yscale = random(50)+10;
}
}
复制跟随
1.新建文档,背景黑色。
2.新建一个名为“心 1”影片剪辑元件,在其编辑区内绘制一个“心图”形。
3.新建一个名为“心 2”影片剪辑元件,把“心1”提进其编辑区内,居中对齐。选中“心
2”滤镜面板里添加发光滤镜效果。
4.在“链接属性”对话框中设置影片剪辑“心 2”的标识符为“mc” 。
5.新建一个名为“空”的影片剪辑元件,拖入场景,选中此空影片剪辑元件,输入 AS:
on ClipEvent (load) {
for (var i = 1; i<=20; i++) {
_root.attachMovie("mc", "mc"+i, 20-i);
_root["mc"+i]._xscale = 100-i*3;
_root["mc"+i]._yscale = 100-i*3;
_root["mc"+i]._alpha = 100-i*5;
}
}
on ClipEvent (enterFrame) {
for (var i = 1; i<=20; i++) {
if (i == 1) {
startDrag(_root["mc"+i], true);
} else {
var zx = _root["mc"+(i-1)]._x-_root["mc"+i]._x;
var zy = _root["mc"+(i-1)]._y-_root["mc"+i]._y;
_root["mc"+i]._x = _root["mc"+i]._x+zx/4+zx/10;
_root["mc"+i]._y = _root["mc"+i]._y+zy/4+zy/10;
}


 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值