旋转粒子

二维粒子 everyinch 3211℃ 0评论

在Particle.as中实现了一个autoRotate属性,它根据每一帧运动的水平速度和垂直速度来计算相应的旋转。autoRate是一个布尔属性。

package{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.TimerEvent;
	import flash.geom.ColorTransform;
	import flash.utils.Timer;

	[SWF(width="800", height="600", backgroundColor="0x000000", frameRate="31")]
	public class ParticleRotation extends Sprite{
		private var numbers:Number=50;
		private var particles:Array;
		private var container:Sprite=new Sprite();

		public function ParticleRotation(){
			particles=new Array();
			stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
			var timer:Timer=new Timer(2000);
			timer.addEventListener(TimerEvent.TIMER, onTimer);
			timer.start();
		}

		private function onTimer(e:TimerEvent):void{
			var colorTransform:ColorTransform=new ColorTransform();
			colorTransform.color=0xffffff * Math.random();
			while (particles.length > 0){
				container.removeChild(particles.shift());
			}
			for (var i:uint=0; i < numbers; i++){
				var particle:Ball=new Ball(3, 0xff0000, 1, 0x0000ff, 1);
				container.addChild(particle);
				particle.x=this.mouseX;
				particle.y=this.mouseY;
				particle.xVelocity=Math.random() * 20 - 10;
				particle.yVelocity=Math.random() * 15 - 15;
				particle.autoRotate=true;
				particle.fade=Math.random() * 0.5 + 1.99;
				particle.growX=1.02;
				particle.growY=0.98;
				particle.gravity=Math.random() + 0.5;
				particle.transform.colorTransform=colorTransform;
				particles.push(particle);
			}
			addChild(container);
		}

		private function onEnterFrame(e:Event):void{
			for (var i:int=0; i < particles.length; i++){
				particles[i].update();
			}
		}
	}
}

代码在构造函数中定义了一个2秒钟的Timer,在Timer上侦听TimerEvent.TIMER事件,事件触发后执行onTimer处理函数。在onTimer函数中构造了50个粒子,将它们初始定位在鼠标所在的位置,设置了它的随机速度、fade、growX、growY、gravity,将它的autoRaote设置为true。为了实现每次具有不同的颜色效果,设置了粒子的colorTransform属性。
ColorTransform类位于flash.geom包中,它使用红色、绿色、蓝色和 Alpha 透明度来调整显示对象的颜色值。ColorTransform的构造函数为:
ColorTransform(redMultiplier:Number = 1.0, greenMultiplier:Number = 1.0, blueMultiplier:Number = 1.0, alphaMultiplier:Number = 1.0, redOffset:Number = 0, greenOffset:Number = 0, blueOffset:Number = 0, alphaOffset:Number = 0)
当 ColorTransform 对象应用于显示对象时,将按如下方法为每个颜色通道计算新值:
新红色值 = (旧红色值 * redMultiplier) + redOffset
新绿色值 = (旧绿色值 * greenMultiplier) + greenOffset
新蓝色值 = (旧蓝色值 * blueMultiplier) + blueOffset
新Alpha值 = (旧Alpha值 * alphaMultiplier) + alphaOffset
如果计算后任何一个颜色通道值大于 255,则该值将被设置为 255。 如果该值小于 0,它将被设置为 0。通过将redMultiplier、greenMultiplier、blueMultiplier和alphaMultiplier设置为0~1之间的数,从而实现逐渐变透明的效果。本例只是将ColorTransform的color属性设置为随机颜色,从而达到粒子每次具有不同颜色的效果。
如果将粒子压入了particles数组,particles.length大于0,就执行update函数执行粒子运动的代码。

分享&收藏

转载请注明:陈童的博客 » 旋转粒子

喜欢 (1)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
'; } if( dopt('d_footcode_b') ) echo dopt('d_footcode'); ?>