用Flash制作闪电效果
网络与通信
编者按:我们在前面几期文章中分别介绍了《用Flash制作烟火效果》和《用Flash制作动态模糊效果》两篇文章,在Flash动画中逼真地模拟出自然界的景象对新手来说有一定难度,涉及到创意及制作经验。本期小编再为大家组织一篇制作闪电效果的文章。希望大家举一反三,并且接合前两期的文章学习。
制作原理
利用ActionScript复制一小段一小段的线段并连接形成闪电。在开始的时候利用随机函数设置闪电的位置。再配合背景的明暗变换,达到逼真的效果。
制作步骤
1.打开Flash,新建一个550×400的文件,背景色为黑色。
2.Insert symbol新建元件命名为“线条”,在工具栏上选择Rectagle tool,并且将Stroke color设为无,fill color白色,画一个矩形。
3.Windows→panels→align打开align面板,设置矩形居中对齐。在工具栏上选择Arrow tool,用鼠标选中这个矩形 ,Windows→panels→fill打开fill面板,在下拉菜单中选择Liner gradient(线形渐变),在出现的滑动杆上可以设置渐变的颜色,如(图1)即由蓝色到白色再到透明的渐变色

4.这里有一个小技巧就是如何设置颜色为透明,Windows→panels→mixer打开Mixer面板,选择填充色Fill color,在面板的右边有R、G、B、Alpha四个下拉框,拖动alpha框的下拉条就可以调整颜色的透明度,将Alpha值设置为0%就是完全透明的了((图2))。

5.新建一个元件,命名为“线条动画”,从library中拖动“线条”元件到layer 1,在第一、三、四、五、六、七、十一帧建立关键帧(Insert keyframe),鼠标单击第一帧,Windows→panels→effect打开Effect面板,设置Alpha值为0%,单击第三帧,设置Alpha值为100%,单击第四帧,设置Alpha值为80%,单击第五帧,设置Alpha值为100%,单击第六帧,设置Alpha值为80%,单击第七帧,设置Alpha值为100%,单击第十一帧,设置Alpha值为0%。鼠标右键单击第一帧,在弹出的菜单中选择Creat motion tween,建立motion动画,同样的方法在第七帧与十一帧之间建立Motion动画((图3))。

6.新建元件命名为“背景”,在工具栏上选择Rectagle tool,Fill color为白色,绘制一个矩形,Windows→panels→info打开Info面板,设置宽为550,高为400。在Align面板上设置居中对齐。
7.回到Scene1,从library中拖动“背景”元件到Layer1,在第一、五、六、七、十帧建立关键帧。鼠标单击第一帧,Windows→panels→effect打开effect面板,设置alpha值为0%,单击第五帧,设置alpha值为20%,单击第六帧,设置alpha值为0%,单击第七帧,设置alpha值为20%,单击第十帧,设置alpha值为0%。右键单击从第七帧到第十帧之间的任意一帧,在弹出的菜单中选择Creat motion tween,建立motion动画(如(图4))。

8.新建一层Layer 2,从Library中拖动“线条动画”元件到layer 2,Windows→panels→instance弹出Instance面板,设置Name属性为:toto。
9.新建一层Layer 3,双击第一帧,在弹出的Frame action面板中输入如下ActionScript:
I = 1;
//设置变量
setProperty ("toto", _visible, 0);
//设置name属性为toto的movieclip不可见。这是为了防止让别人看到复制的原形而影响效果所采取的手段
X = 100+Number(random(300)) ;
//设置随机数,得到一个变量x,为x坐标,加上100是为了防止x坐标过小,而导致闪电不在屏幕内。
Max = random(350);
//取随机数,max 为复制movieclip的个数,这样取得随机数后,则每次复制的movieclip个数不定,表现出来的效果就是闪电的长短不一。
Inspiration = random(3)-1;
在第二帧新建关键帧,双击第二帧,在弹出的frame action面板中输入如下actionscript:
while (Number(I)
I = Number(I)+1;
//一个变量,用来决定每个复制出的movieclip的偏移量
//执行actionscript的次数
duplicateMovieClip ("Toto", "Toto" add I, I);
//复制名称为toto的movieclip
setProperty ("Toto" add I, _y, I);
//设置复制出的movieclip的y坐标值
Trajectoire = Number(random(5)-2)+Number(Inspiration);
X = Number(X)+Number(trajectoire);
//得到复制出的movieclip的x轴坐标,并且每一个x坐标都会有偏移量
setProperty ("Toto" add I, _x, X);
setProperty ("Toto" add I, _xscale, I-Max);
}
//设置复制出的movieclip的x轴坐标与变形
while (Number(I)<350) {
I = Number(I)+1;
removeMovieClip ("Toto" add I);
}
//移除复制出的movieclip,使闪电有逐渐消失的效果。
本例效果:http://www.5dmedia.com/users/pcking/light.html
本例源文件:http://www.5dmedia.com/users/pcking/light.fla