| 本实例的火焰效果和一般的火焰效果不同,这里的火焰除了不停的抖动和伸缩外,还会不断的变化火焰的颜色,加上黑色的背景,给人一种神秘的感觉,看上去很象一些电影中的鬼火,是不是很恐怖哦,长话短说,下面我们就来学习其制作方法。 首先启动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 |