• RSS订阅 加入收藏  设为首页
Flash教程

Flash中随机雷电效果实现

时间:2011/11/17 15:57:28   作者:小利子   来源:FLASH课件网   阅读:1441   评论:0
内容摘要:随机生成雷电总共需要三个MovieClip。其中一个是雷电,一个是雷电周围的光晕,分别是一个中心辐射的白球和一个中心辐射的蓝紫色球,大小比为100:37(可以自己调,不过相应地就要修改Code中比例)。第三个MC就是生成雷电用的。现在的代码生成的是静态的,稍加修改就能做动...

随机生成雷电
总共需要三个MovieClip。其中一个是雷电,一个是雷电周围的光晕,分别是一个中心辐射的白球和一个中心辐射的蓝紫色球,大小比为100:37(可以自己调,不过相应地就要修改Code中比例)。第三个MC就是生成雷电用的。
现在的代码生成的是静态的,稍加修改就能做动态的。
第三个MC上第一个MC(白球)的名字是BallA,第二个MC的名字是BallB。
总共5帧,其中1、2、4、5为关键帧,第二帧名字为“Start”,无Code。
第一帧:
var D:Number=1.5;//每段间距
var SMin:Number=10;//每段最小
var SMax:Number=20;//每段最大
var Layers:Number=0;//记录当前雷电数
var LayerMax:Number=500;//记录雷电最大数
var WQ:Number=10;//记录雷电的弯曲程度
var wq:Number=0;//记录每小段的长度
var w:Number=0;//记录每小段的位
var CD:Number=120;//记录每小段弯曲程度
var PMin:Number=0;//最低概率
var PMax:Number=2;//最大底部放大倍率   //flash工作室http://www.flashkj.com
var X:Number=200*(2*Math.random()-1);
var Y:Number=200;
var DMin:Number=10;
var FolkLength:Number=200;//分叉雷电长度
var FolkDis:Number=5;//分叉雷电生成间隔
var FolkHeight:Number=50;//分叉雷电产生高度下限
var FolkShift:Number=100;//分叉雷电横移量
var FolkSize:Number=0.5;//分叉雷电大小比率
var FolkAng:Number=0.6;//分叉雷电变化角度比率
function Initial(X:Number,Y:Number,LayerName:String,Layers:Number,LayerMax:Number){
var i:Number;
BallA._height=SMin*0.37;
BallA._width=SMin*0.37;
BallB._height=SMin;
BallB._width=SMin;
BallA._x=X;
BallA._y=Y;
BallB._x=X;
BallB._y=Y;
for(i=0;(i<=Layers)||(i<=LayerMax);i++){
removeMovieClip(LayerName add "A" add i);
removeMovieClip(LayerName add "B" add i);
}
}
function MainLight(FX:Number,FY:Number,TX:Number,TY:Number){
var i:Number;
var wq:Number;
var Ang:Number; //内容来自flash工作室******"http://www.flashkj.com"******

var Beta:Number;
var S:Number;
var I:Number=1;
var f:Number=0;
var F:Number=FolkDis*Math.random();
for(i=1;(BallA._y<=TY)&&(i<=LayerMax);){
wq=WQ*Math.random();
Beta=Math.pow(Math.random(),2);
if(Math.random()>0.5)Beta=-Beta;
Beta=Beta*(Math.pow(Math.abs((BallA._y-Y)/Y),0.5)+PMin);
Ang=-Math.atan2(BallA._y-Y,X-BallA._x)+CD/180*Math.PI*Beta;
for(w=0;(w<wq)&&(BallA._y<=Y)&&(i<=LayerMax);w++,i++,I++){
duplicateMovieClip("BallA","BallA" add I,10005+I);
duplicateMovieClip("BallB","BallB" add I,5+I);
S=SMin+(SMax-SMin)*Math.random()*(1+PMax*(1-Math.abs((BallA._y-Y)/Y)));
setProperty("BallA",_height,S*0.37);
setProperty("BallA",_width,S*0.37);
setProperty("BallB",_height,S);
setProperty("BallB",_width,S);
setProperty("BallA",_x,BallA._x+D*Math.cos(Ang));
//flash教程******"http://www.flashkj.com"******
setProperty("BallA",_y,BallA._y+D*Math.sin(Ang));
setProperty("BallB",_x,BallB._x+D*Math.cos(Ang));
setProperty("BallB",_y,BallB._y+D*Math.sin(Ang));
}
f++;
if((f>=F)&&(BallA._y<=TY-FolkHeight)){
f=0;
F=FolkDis*Math.random();
if(Math.random()>0.5){
I=FolkLight(BallA._x,BallA._y,BallB._x,BallB._y,BallA._x+FolkShift+100*Math.random(),BallA._y+100*Math.random(),I);
}else{
I=FolkLight(BallA._x,BallA._y,BallB._x,BallB._y,BallA._x-FolkShift-100*Math.random(),BallA._y+100*Math.random(),I);
}
}
I+=2;
}
return I;
}
function FolkLight(FX:Number,FY:Number,BX:Number,BY:Number,TX:Number,TY:Number,Sts:Number){
var i:Number;
var wq:Number;
var Ang:Number;
var Beta:Number;
var S:Number;
var I:Number=Sts;
var Length:Number=FolkLength*Math.random();
var R:Number=Math.sqrt(Math.pow(FX-TX,2)+Math.pow(FY-TY,2)); //flashkj.com******"http://www.flashkj.com"******
var r:Number=Math.sqrt(Math.pow(BallA._x-TX,2)+Math.pow(BallA._y-TY,2));
for(i=1;(r>=DMin)&&(i<=Length);){
wq=WQ*Math.random();
Beta=Math.pow(Math.random(),2);
if(Math.random()>0.5)Beta=-Beta;
Beta=Beta*(Math.pow(r/R,0.5)+PMin);
Ang=-Math.atan2(BallA._y-TY,TX-BallA._x)+CD*FolkAng/180*Math.PI*Beta;
for(w=0;(w<wq)&&(r<=Dmin)&&(i<=Length);w++,i++,I++){
duplicateMovieClip("BallA","BallA" add I,10005+I);
duplicateMovieClip("BallB","BallB" add I,5+I);
S=SMin+(SMax-SMin)*Math.random();
S*=FolkSize;
setProperty("BallA",_height,S*0.37);
setProperty("BallA",_width,S*0.37);
setProperty("BallB",_height,S);
setProperty("BallB",_width,S);
setProperty("BallA",_x,BallA._x+D*FolkSize*Math.cos(Ang));
setProperty("BallA",_y,BallA._y+D*FolkSize*Math.sin(Ang));
setProperty("BallB",_x,BallB._x+D*FolkSize*Math.cos(Ang)); //flash教程******"http://www.flashkj.com"******
setProperty("BallB",_y,BallB._y+D*FolkSize*Math.sin(Ang));
setProperty("BallA" add I,_alpha,200*Math.min((r-DMin)/R,(Length-i)/Length));
setProperty("BallB" add I,_alpha,200*Math.min((r-DMin)/R,(Length-i)/Length));
r=Math.sqrt(Math.pow(BallA._x-TX,2)+Math.pow(BallA._y-TY,2));
}
I+=2;
}
BallA._x=FX;
BallA._y=FY;
BallB._x=BX;
BallB._y=BY;
return I;
}
//flash工作室"http://www.flashkj.com"


第四帧:
X=X+10*(2*Math.random()-1);
removeMovieClip("Point");
this.createEmptyMovieClip("Point",1);
this.Point.lineStyle(2,0xffffff,100);
this.Point.moveTo(X,Y);
this.Point.lineTo(X,Y-20);
Initial(0,0,"Ball",Layers,LayerMax);
Layers=MainLight(0,0,X,200);

//copyright net******"http://www.flashkj.com"******


第五帧:
this.stop();


标签:记录  Flash 蓝紫色 动态 

逝者如斯,不舍昼夜作者QQ及微信:49922779 点击这里给我发消息

相关评论
QQ交流群:120100441    QQ客服:49922779 闽ICP备01008686号