模拟喷泉粒子
1.用ball构建单个粒子
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
package
{
import flash.display.Sprite;
public class Ball extends Sprite
{
public var radius:Number;
public var color:uint;
public var vx:Number=0;
public var vy:Number=0;
public function Ball (radius:Number,color:uint)
{
this.radius=radius;
this.color=color;
Init ();
}
public function Init ():void
{
graphics.beginFill (color);
graphics.drawCircle (0,0,radius);
graphics.endFill ();
}
}
}
2.构建喷泉粒子发射
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
package
{
import flash.events.Event;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
public class Fountain extends Sprite
{
private var count:int=300;
private var gravity:Number=0.5;
private var balls:Array;
public function Fountain ()
{
Init ();
}
public function Init ():void
{
stage.scaleMode=StageScaleMode.NO_SCALE;
stage.align=StageAlign.TOP_LEFT;
balls=new Array();
for (var i:int=0; i<count; i++)
{
var ball:Ball=new Ball(2,Math.random() * 0xffffff);
InitPosition(ball);
InitSpeed (ball);
addChild (ball);
balls.push (ball);
}
addEventListener (Event.ENTER_FRAME,Active);
}
private function Active (e:Event):void
{
for (var i:int =0; i<balls.length; i++)
{
var ball:Ball=Ball(balls[i]);//var ball:Ball=balls[i];也可以
ball.vy+=gravity;
ball.x+=ball.vx;
ball.y+=ball.vy;
//边界再生
if (ball.x-ball.radius>stage.stageWidth ||
ball.x+ball.radius<0 ||
ball.y-ball.radius>stage.stageHeight ||
ball.y+ball.radius<0)
{
InitPosition(ball);
InitSpeed (ball);
}
}
}
private function InitPosition(ball:Ball):void
{
ball.x=stage.stageWidth/2;
ball.y=stage.stageHeight;
}
private function InitSpeed (ball:Ball):void
{
ball.vx=Math.random() *6-3;
ball.vy=(-10)*Math.random() -10;
}
}
}