| | |
用Flash制作鬼火效果
|
|
时间:2003-4-18 16:21:57 |
|
本实例的火焰效果和一般的火焰效果不同,这里的火焰除了不停的抖动和伸缩外,还会不断的变化火焰的颜色,加上黑色的背景,给人一种神秘的感觉,看上去很象一些电影中的鬼火,是不是很恐怖哦,长话短说,下面我们就来学习其制作方法。(本例源文件请点击下载)
首先启动Flash,新建一个大小为500px*400px,背景色为黑色的影片。
既然制作的效果是火焰,自然少不了一个简单的火焰效果,然后通过Action的控制,就可以变化出变幻莫测的火焰来。所以新建一个Movie clip组件,命名为fires,进入组件的编辑状态后,使用椭圆工具绘制一个长条形的椭圆,使用箭头工具将椭圆的两个尖调整的细一点,然后使用颜料桶工具将其填充为黄色和黑色的线性填充色,如图1所示:
图1
然后分别在图层layer1的第5桢和第8桢插入两个关键桢,回到第5关键桢,将此祯的椭园对象的长度调整的长一些,如图2所示:
图2
分别建立第1关键桢到第5关键祯和第5关键桢到第8关键桢之间的Motion运动过渡效果,时间线如图3所示;
图3
既然我们的这个火焰效果是可以变化颜色的,所以现在就来制作控制火焰颜色变化的Action控制代码。新建一个Movie clip,命名为color,进入组件的编辑状态后,在图层layer1的第1桢添加如下Action:
col = Random(0xafafaf)+0x999999;
//使用random随机函数取随机值,其中0xafafaf和0x999999为16进制数,16进制//数常用于颜色设置。Col变量接受产生的随机数
firecol = new Color(_root["fire"and i]);
ffcol = new color(_root.ff);
//定义两个color类的对象firecol和ffcol
firecol.setRGB( col );
ffcol.setRGB( firecol.getRGB()+0xfaff44 );
//两个color类的对象firecol和ffcol分别被设置了相应的颜色
在图层layer1的第2桢添加如下Action:
col = col+0x0f0f0f;
//重新设置变量col的值
firecol.setRGB( col );
ffcol.setRGB( firecol.getRGB()+0xfaff44 );
//重新设置两个color类的对象firecol和ffcol的颜色值
在图层layer1的第10桢添加如下Action:
gotoAndPlay(2);
//返回到第2桢
这样,我们需要的所有组件就都准备好了,接下来就需要布置主场景了。
回到主场景中,将组件fire从图库中拖到图层layer1中,并放置到舞台的合适位置,在属性面板中命名其为ff,然后将图层layer1延伸到第3桢,如图4所示:
图4
新增一个图层layer2,将组件color拖到工作区的任意位置即可,因为组件layer2中没有任何图形对象,全部为Action控制代码,所以组件color放置到工作区时只能看到一个空的圆圈,说明这个是一个空的Movie clip.
再新增一个图层layer3,在第1桢添加如下Action控制代码:
if (i>10) {
i = 0;
}
i++;
duplicateMovieClip("/ff", "fire"and i, i);
setProperty("fire"and i, _x, _root.ff._x+Random(7)-3);
setProperty("fire"and i, _y, _root["fire"and (i-1)]._y-60*Math.pow(0.6,i));
setProperty("fire"and i, _xscale, Math.pow(0.95,i)*100);
setProperty("fire"and i, _yscale, Math.pow(1.05,i)*100);
//复制10个对象ff的副本,然后分别设置副本的坐标和缩放尺寸。
在图层layer3的第3桢添加如下Action控制代码:
if (i>10) {
i = 0;
}
i++;
duplicateMovieClip("/ff", "fire"and i, i);
setProperty("fire"and i, _x, _root.ff._x+Random(7)-3);
setProperty("fire"and i, _y, _root["fire"and (i-1)]._y-60*Math.pow(0.55,i));
setProperty("fire"and i, _xscale, Math.pow(0.95,i)*100);
setProperty("fire"and i, _yscale, Math.pow(1.05,i)*100);
gotoAndPlay(1);
//上面的Action和第1桢中的完全相同,目的是重复执行这段代码。
最后的时间线如图5所示:
图5
本实例的最终效果如图6所示:
图6
|
|
|
·上一条:Flash光影字效果 (4-18)
·下一条:Flash制作环形文字 (4-18)
|
|
|
|
|
|
|
|
| | | |