在Particle.as中实现了一个autoRotate属性,它根据每一帧运动的水平速度和垂直速度来计算相应的旋转。autoRate是一个布尔属性。
2 | import flash.display.Sprite; |
3 | import flash.events.Event; |
4 | import flash.events.TimerEvent; |
5 | import flash.geom.ColorTransform; |
6 | import flash.utils.Timer; |
8 | [SWF(width= "800" , height= "600" , backgroundColor= "0x000000" , frameRate= "31" )] |
9 | public class ParticleRotation extends Sprite{ |
10 | private var numbers: Number = 50 ; |
11 | private var particles: Array ; |
12 | private var container:Sprite= new Sprite(); |
14 | public function ParticleRotation(){ |
15 | particles= new Array (); |
16 | stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); |
17 | var timer:Timer= new Timer( 2000 ); |
18 | timer.addEventListener(TimerEvent.TIMER, onTimer); |
22 | private function onTimer(e:TimerEvent): void { |
23 | var colorTransform:ColorTransform= new ColorTransform(); |
24 | colorTransform.color= 0xffffff * Math.random(); |
25 | while (particles.length > 0 ){ |
26 | container.removeChild(particles.shift()); |
28 | for ( var i: uint = 0 ; i < numbers; i++){ |
29 | var particle:Ball= new Ball( 3 , 0xff0000 , 1 , 0x0000ff , 1 ); |
30 | container.addChild(particle); |
31 | particle.x= this .mouseX; |
32 | particle.y= this .mouseY; |
33 | particle.xVelocity=Math.random() * 20 - 10 ; |
34 | particle.yVelocity=Math.random() * 15 - 15 ; |
35 | particle.autoRotate= true ; |
36 | particle.fade=Math.random() * 0.5 + 1.99 ; |
39 | particle.gravity=Math.random() + 0.5 ; |
40 | particle.transform.colorTransform=colorTransform; |
41 | particles.push(particle); |
46 | private function onEnterFrame(e:Event): void { |
47 | for ( var i: int = 0 ; i < particles.length; i++){ |
48 | 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函数执行粒子运动的代码。

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