flash特效原理 粒子爆

               

粒子爆

鼠标按下的时候,生成200个粒子,粒子向不同的方向移动,从而产生一种像仙女散花的感觉。

 

 

下面是散开的效果,同样你可以为你的效果添加很多元素,包括引力,重力,摩擦力等等情况,但这部分就靠自己,还是需要自己想法出来

 

21

 

简单的做法,代码很少,涉及到运动的方向做法。效果看起来让我觉得惊讶,不过换来代价是卡卡卡,当我尝试换成1000个粒子的时候

则会产生很多问题,是由于生成的对象太多了,内存占用率很高,你可以测试一下。生成效果很不错。

 

基本思路:鼠标按下--》生成一定数量的粒子,粒子按随机的方向行走,行走一定的时候,就需要立刻对其删除,否则会产生内存问题。

 

看看下面的代码,做法很简单。只是觉得有一种不错的想法,暂时先把他记录下来。

 

粒子随机轨迹角度,则需要通过Math.atan2 进行计算,在flash里面这个方法可以为运动学创造带来很多方便。有兴趣的可以去测试一下。

 

其中:Ball 为通过库链接的链接过来的影片剪辑,因此在创建这个程序的时候,可以在元件库里面 自行添加进去,尝试更改粒子的样貌,这样效果会呈现出不同的形态。

 ball类

这个只是一个元件,缩放元件的大小,产生的效果也不一样,周边的白色边,加上一些高光的效果,就能够发挥出不错的夜光性。

(由于上传图片 太麻烦,只能在最近才修改这些。 上传日期:1月27日)

 再对其进行修正,粒子的轨迹也可以是不按随机的,也可以按随机的方向。这样不同的做法,效果看起来会更加不错,相信你会创建出很多很多绚丽的特效,而这些事情就需要去完善。

package { import flash.display.MovieClip; import flash.display.DisplayObject; import flash.events.*; public class Main extends MovieClip {  //private var list:Array=new Array();//管理粒子  //private var speed:int=5;  private var contain:MovieClip=new MovieClip();//容器管理粒子  public function Main()  {   init();  }  private function init():void  {   addChild(contain);   stage.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler);  }  //生成粒子,200个小球,然后向不同的方向移动,速度不一样,角度也不样  private function MouseDownHandler(event:MouseEvent):void  {   for (var i:int=0; i<200; i++)   {    var ball:Ball=new Ball();    contain.addChild(ball);    ball.x=mouseX;    ball.y=mouseY;    ball.vx=Math.random()*4+2;//随机生成不同的x速度    ball.vy=Math.random()*5+2;//随机生成不同的y速度    //ball.alpha=Math.random()+0.1;    var angle:Number=Math.atan2(Math.random()*400-ball.y,Math.random()*550-ball.x);//随机一个角度    ball.angle=angle;    ball.addEventListener(Event.ENTER_FRAME,BallMove);    //list.push(ball);   }  }  //每一个粒子的移动  private function BallMove(event:Event):void  {   event.currentTarget.x+=Math.cos(event.currentTarget.angle)*event.currentTarget.vx;   event.currentTarget.y+=Math.sin(event.currentTarget.angle)*event.currentTarget.vy;            //drawLine(mouseX,mouseY,event.currentTarget.x,event.currentTarget.y);   if (event.currentTarget.y<0 || event.currentTarget.y>stage.stageHeight||   event.currentTarget.x<0 || event.currentTarget.x>stage.stageWidth   )   {    event.currentTarget.removeEventListener(Event.ENTER_FRAME,BallMove);    contain.removeChild(DisplayObject(event.currentTarget));   }  }  //绘制线条,这个方法你可以尝试一下,  private function drawLine(x1,y1,x2,y2:Number):void  {   graphics.clear();   graphics.lineStyle(1,0xff0000);   for (var i:int=0; i<=contain.numChildren; i++)   {    graphics.moveTo(x1,y1);    graphics.lineTo(contain.getChildAt(i).x,contain.getChildAt(i).y);   }  } }}

 

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值