在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函数执行粒子运动的代码。