旋转粒子
在Particle.as中实现了一个autoRotate属性,它根据每一帧运动的水平速度和垂直速度来计算相应的旋转。autoRate是一个布尔属性。[code lang="as3"]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();
}
}
}
}[/code]
代码在构造函数中定义了一个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函数执行粒子运动的代码。
<img class="alignnone size-medium wp-image-119" title="ParticleRotate" src="http://www.everyinch.net/wp-content/uploads/2011/09/ParticleRotate-300x273.jpg" alt="" width="300" height="273" />