旋转粒子

二维粒子 everyinch 3371℃ 0评论

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

1package{
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;
7 
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();
13 
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);
19            timer.start();
20        }
21 
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());
27            }
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;
37                particle.growX=1.02;
38                particle.growY=0.98;
39                particle.gravity=Math.random() + 0.5;
40                particle.transform.colorTransform=colorTransform;
41                particles.push(particle);
42            }
43            addChild(container);
44        }
45 
46        private function onEnterFrame(e:Event):void{
47            for (var i:int=0; i < particles.length; i++){
48                particles[i].update();
49            }
50        }
51    }
52}

代码在构造函数中定义了一个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'); ?>