用Flash模拟雨雪等自然现象的策略研究
本文的重点是通过制作下雪、下雨的特效,仔细挖掘其中的共同点即共性,从而找到解决此类问题的规律。
1 用Flash制作逼真的下雪场景
1.1 启动Flash,建立文档,设置文档大小550×300,背景色为黑色。
1.2 导入一副雪景图片到库中。
1.3 把图层1命名为“背景”,并把库中的雪景图片放置到“背景”图层中并设置成文档大小,跟文档重合。
1.4 在“背景”图层上新建2个图层,分别命名为“下雪元件”和“action”,接下来要用到,这里先创建好。
1.5 下雪影片元件的制作,这一步也很重要,制作效果直接影响到下雪的逼真程度。
(1)创建“雪花”图形元件:利用线条工具绘制好“雪花”的一部分,再使用“变形”功能生成一朵静止的雪花,为了更形象逼真,再在雪花中央位置绘制一个具有渐变色彩过渡的圆形,如下图1所示。
(2)生成“下雪”影片元件:利用Flash中的引导动画使得“雪花”图形元件从上向下缓慢曲线飘落,这里需要注意的是图层时间线上播放帧数最好长一点,我是让雪花飘落从第1帧开始持续到第100帧。图层及时间线如下图2:
1.6 回到场景,把已经制作好的“下雪”影片元件放置到“下雪元件”图层的第一帧位置,调整其在场景中的位置在右上角,在属性面板上把该影片元件命名为“snow”,影片元件正确命名这一步骤很重要。
1.7 在“action”图层的第1帧插入空白关键帧,输入如下脚本代码:
i=0;
i是一个变量,用来统计产生雪花的数量,初始化为0。
1.8 在“action”图层的第2帧插入空白关键帧,输入如下脚本代码:
duplicateMovieClip("snow",i,i);
setProperty(i,_x,random(550));
setProperty(i,_y,random(300));
setProperty(i,_alpha,random(100));
以上脚本代码的功能是利用影片复制函数duplicateMovieClip()随机“克隆”出带有标记的雪花,设置新“克隆”出来的雪花在场景范围内随机变化的横坐标位置、纵坐标位置以及它的透明度。
其实,在这里还尽可以设置雪花的其它属性,使得模拟效果更加接近真实场景,更加逼真。比如可以随机设置雪花的大小变化、快慢甚至颜色的变化等等,如果有需要的话。
1.9 在“action”图层的第3帧插入空白关键帧,输入如下脚本代码:
i++;
if (i==200){i=1;}
gotoAndPlay(2);
以上脚本代码的功能是利用条件判断语句IF来产生一定数量的雪花,这里是200朵。如果没有达到设定数量的雪花,那就回到第2关键帧继续产生,计数器累加;否则计数器i重新赋值为1,再次产生设定数量的雪花。如此周而复始的执行这个过程,在视觉上就看到了雪花纷纷飘落的逼真场景。
其实,产生雪花的数量可以利用随机函数随机产生,没必要设定死,这样的话就可以产生雪花稀疏程度不一的下雪模拟场景。
1.10 把“背景”图层和“下雪元件”图层的播放时间延长到第3帧。
最终的图层及时间线如下图3:
1.11 测试影片效果。
2 用Flash制作逼真的下雨场景
仔细研究刚才下雪特效的制作过程,会自然而然的提出一个问题:既然可以这样简单快速的制作下雪场景,下雨也是同下雪一样的自然现象,大同小异,能不能把程序控制的“下雪”影片元件换成“下雨”影片元件,其他方面做微小的改动,不就是得到了下雨的模拟场景?答案是完全肯定的。主要的制作过程如下:
2.1 制作好“波纹”图形元件和“雨滴”图形元件,效果如下图4所示:
2.2 制作好“雨滴和波纹运动”影片元件,要求雨滴从空中落下,打在地面上,随之出现雨滴散开之后的向四周扩散的波纹运动,这个效果要制作的逼真些,否则会影响总体效果。图层及时间线如下图5所示:
2.3 回到场景,把“雨滴和波纹运动”影片元件放置到“下雨元件”图层的第一帧,命名为“drop”,影片元件放置在场景的上方即可。
2.4 在“action”图层第1帧插入空白关键帧,输入如下代码:
duplicateMovieClip("/drop", "drop" add i, i);
setProperty("drop"add i, _x, random (300)+100);
setProperty("drop"add i, _y, -(random (30)));
setProperty("drop"add i, _alpha, random (100));
2.5 在“action”图层第2帧插入空白关键帧,输入如下代码:
i=i+1;
if(i==100) {i = 1;}
gotoAndPlay(1);
以上代码的功能同上面下雪效果控制代码的功能相似,在此就不重复叙述了。
2.6 把“背景”图层和“下雨元件”图层的播放时间延长到第2帧
最终的图层及时间线如下图6:
2.7 测试影片效果
通过以上下雪下雨自然现象的模拟效果制作,从解决方法上来说,是相同的,甚至连具体的脚本控制代码也是基本相同的。既然如此,是不是类似的自然现象(比如漫天飘舞的枫叶、暴风雨、暴风雪、水波荡漾等等)的场景模拟也可以采用以上方法得到完美解决,答案也是完全肯定的,只要加以改进并灵活应用即可。
之所以会觉得以上方法简单易用、容易理解、代码的可移植性强,是因为它们有很多共性的东西及规律,这也是本文所要阐述的重点所在。那么有哪些相同的地方呢?下面做一总结:
(1)这些自然现象的逼真模拟特效的制作都是采用脚本代码和程序控制来完成的。因此对Flash中脚本代码的理解和使用要熟悉。
(2)都是通过程序控制影片元件来模拟不同效果的,比如上面的“下雪”影片元件和“雨滴和波纹运动”影片元件,因此影片元件的效果制作就显得特别重要,原因很简单,影片元件制作效果的好坏直接影响到总体的模拟效果。
(3)影片元件放置到场景中时一定记得要正
确命名,因为脚本控制的对象就是影片,实际上就是它的新命名名字,而且在控制代码中涉及到的影片名字必须跟在场景属性面板上的命名保持完全一致,否则达不到预期的效果,或者效果干脆出不来。这一步很多人会搞错,在实际操作时要引起足够的小心和重视。
(4)在控制代码的设置方面一般采用三步骤:制变量的定义和初始化、复制影片元件同时设置随机变化的影片属性以及采用循环控制语句IF来执行重复某个动作或结束动作。每个步骤的脚本代码单独按顺序放置在不同的空白关键帧上。
总之,只要规律在手并加以灵活应用,何愁做不出生动逼真的场景模拟甚至激动人心的动漫作品呢?
参考文献:
[1]孙颖.Flash ActionScript3殿堂之路[M].北京:电子工业出版社,2007.
[2]陈宗斌.Adobe Flash CS4中文版经典教程[M].北京:人民邮电出版社,2009.
[3]刘欢.Flash ActionScript 3.0全站互动设计[M].北京:人民邮电出版社,2012.
作者简介:唐小健(1972-),男,江西安远人,1999年毕业于天津职业技术师范学院信息工程本科专业,获工学学士学位,信息技术中学高级教师,毕业至今一直从事计算机专业多门学科的教学研究工作,研究方向:计算机程序设计等,在多家中文核心期刊上发表过多篇论文。