——转自网络——
在这个效果里有用到ACTION,如果你不会就赶快先学好ACTION吧。还用到了我们中学时学过的三角函数,为了这个效果我还专门找邻居家的小弟弟,借来他的教科书,把三角函数好好学了一下。现在真是后悔当初怎么不好好读书呀!
好了,#我就不放了,进入正题吧。首先做一个如左图的MC,聪明的你一定看出来了,他是由三个部份组成的,上面一个半圆,中间一个矩形,下面又一个半圆。要注意MC的中心点要在上一个半圆的圆心的位置。下面我就称它为"闪光段"。
传统的教育是一步一步,按步就搬,现在不是流行启发式教育吗?我们不妨先来看看做成品。
下面我就来讲解一下我的算法:
整个闪电是由一定数量“闪光段”的替身组成。每节“闪光段”的长度和旋转角度都是不定的,这可以用random(随机函数)来实现。而“闪光段”的粗细则是从大到小变化的。第一个“闪光段”的位置是固定的,而第二个“闪光段”的位置是利用前一个“闪光段”的长度和旋转角度通过三角函数计算出来的。
具体做法:
先把“闪光段”MC拖到场景中,起名为“basic”,第一个关键帧后加入一个关键帧,整个动画只有两个关键帧。
下面是第一帧的程序:(红色文字是注释)
heightstart = 10;
定义“闪光段”高度的最小值heightrange = 50;
定义“闪光段”高度的范围
anglestart = -80;
定义“闪光段”转角的最小值
anglerange = 160;
定义“闪光段”转角的范围
setProperty ("basic", _visible, false);
设置“闪光段”basic在场景中不可见
下面是第二帧的程序:(红色文字是注释)
i = 1;
//置循环初值currentx = 300;
//第一个闪光段的位置(X)currenty = 0;
//第一个闪光段的位置(Y)do { i = i+1; heightoffset = random(heightrange)+heightstart;
//产生随机长度 angleoffset = random(anglerange)+anglestart;
//产生随机旋转角度 newobj = "basic" add i;
//产生一个字符串,用于下一条语句中。 duplicateMovieClip ("basic", newobj, i);
//复制新的闪光段,用newobj中的字符串为其命名,设置它的深度为i setProperty (newobj, _x, currentx);
//设置刚复制的闪光段的位置(X) setProperty (newobj, _y, currenty);
//设置刚复制的闪光段的位置(Y) setProperty (newobj, _height, heightoffset);
//设置刚复制的闪光段的长度 setProperty (newobj, _rotation, angleoffset);
//设置刚复制的闪光段的旋转角度 setProperty (newobj, _xscale, 100-5*i);
//设置刚复制的闪光段的粗细 currentx = currentx-(Math.sin(angleoffset*3.14/180))*heightoffset*.7;
//计算下一个闪光段的位置(X) currenty = currenty+(Math.cos(angleoffset*3.14/180))*heightoffset*.7;
//计算下一个闪光段的位置(X)} while (i<20);
//设置循环结束条件,数值越大,闪电的段数越多,当然太多会超出屏幕,可以改小长度。 好了就讲到这地吧
[
本帖最后由 红岩梦幻数码 于 2007-8-23 11:32 编辑 ]