复制影片剪辑深入 startDrag与 stopDragfor循环.docx
- 文档编号:24239579
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:21
- 大小:23.99KB
复制影片剪辑深入 startDrag与 stopDragfor循环.docx
《复制影片剪辑深入 startDrag与 stopDragfor循环.docx》由会员分享,可在线阅读,更多相关《复制影片剪辑深入 startDrag与 stopDragfor循环.docx(21页珍藏版)》请在冰豆网上搜索。
复制影片剪辑深入startDrag与stopDragfor循环
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帧输入代码:
vari=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()
脚本位置:
ActionScript2.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)选中场景中的梅枝影片剪辑元件,打开动作面板添加代码:
onClipEvent(load){
vari=0;
}
on(press){
i++;
varn=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:
vari=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.运行Flash8,背景色为黑色,其它默认。
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代码:
onClipEvent(load){
k=1;
startDrag(_root.ms,true);
Mouse.hide();//隐藏指针
}
onClipEvent(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.onRelease=function(){
this.swapDepths
(1);
}
my_mc2.onRelease=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)选中红矩形影片剪辑元件,打开用作面板,添加代码:
onClipEvent(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(vari=1,sun=0;i<=100;i++){
sun=sun+i;
}
trace(sun);
3.初始表达式也可以省略,但必顺在for语句前初始化变量,如:
vari=0
varsun=0;
for(;i<=100;i++){
sun=sun+i;
}
trace(sun);
注意:
当省略初始表达式时,其后的分号不能省略。
4.递增表达式也可以省略,但必顺保正循环能正常结速,如:
varsun=0;
for(vari=0;i<=100;){
sun=sun+i;
i+=1;
}
trace(sun);
5.for语句中可以同时省略初始表达式和递增表达式,如:
vari=1
varsun=0;
for(;i<=100;){
sun=sun+i;
i+=1;
}
trace(sun);
这时程序和while完全一样,所以可以用for来代替while语句,也就是说for语句的功
能比while语句强大得多。
烟花
本例是实现一个烟花效果。
鼠标点击后,会绽放一朵灿烂烟花。
而烟花由小流星复制而成。
复制的个数由循环语句来控制的。
1.新建文档,背景黑色。
其它默认。
2.新建一个名为“礼花1”的影片剪辑元件,在此元件的第1帧绘制一个流星式的图形。
3.在第10帧处插入关键帧,把绘制的图形右移,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 复制影片剪辑深入 startDrag与 stopDragfor循环 复制 影片 剪辑 深入 startDrag stopDragfor 循环