forked from: forked from: particle test

by melfuad
♥0 | Line 83 | Modified 2010-09-29 17:06:41 | MIT License
play

ActionScript3 source code

/**
 * Copyright melfuad ( http://wonderfl.net/user/melfuad )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/3GAz
 */

// forked from omine's forked from: particle test
// forked from deform's particle test
package {
    import flash.geom.Point;
    import flash.filters.BlurFilter;
    import flash.text.TextField;
    import flash.geom.Rectangle;
    import flash.geom.ColorTransform;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    [SWF(width = "2010", height = "465", backgroundColor = "0xffffff", frameRate = "60")]
    
    public class FlashTest extends Sprite {
            private static const WIDTH:Number = 465;
            private static const HEIGHT:Number = 465;
            private static const PARTICLE_MAX:Number = 1000;
            
            private var tf:TextField;
            private var canvas:BitmapData;
            private var fxbmd:BitmapData;
            private var particles:Array;
            private var cTrs:ColorTransform;
            private var cTrs2:ColorTransform;
            private var blur:BlurFilter;
            private var rect:Rectangle;
            private var point:Point;
            private var testCounter:Number = 0;
            
            private var mx:Number;
            private var my:Number;
            
        public function FlashTest() {
            // write as3 code here..
            
            cTrs = new ColorTransform(1, 1, 1, 0.9);
            cTrs2 = new ColorTransform(1, 1, 1, 0.95);
            blur = new BlurFilter(5, 5, 2);
            rect = new Rectangle(0, 0, WIDTH, HEIGHT);
            point = new Point(0, 0);
            
            canvas = new BitmapData(WIDTH, HEIGHT);
            addChild(new Bitmap(canvas));
            fxbmd = new BitmapData(WIDTH, HEIGHT);
            addChild(new Bitmap(fxbmd));
            
            tf = new TextField();
            addChild(tf);
            
                particles = [];
            createParticle();
            
            addEventListener(Event.ENTER_FRAME, _upDate);
        }
        
        private function createParticle():void {
            for(var i:int=0; i<PARTICLE_MAX; i++){
                var p:Particle = new Particle();
                p.x = Math.sin(i/180)*130 + WIDTH/2;
                p.y = Math.cos(i/180)*130 + HEIGHT/2;
                p.tx = (Math.sin(i/180)*Math.PI+Math.random()*2-1) * Math.random();
                p.ty = (Math.cos(i/180)*Math.PI+Math.random()*2-1) * Math.random();
                p.c = 0x00;
                particles.push(p);
            }
        }
        
        private function _upDate(e:Event):void {
                tf.text = "particles : "+particles.length;
                canvas.lock();
            canvas.colorTransform(rect, cTrs);
                for(var i:int=0; i<particles.length; i++){
                    particles[i].x += particles[i].tx;
                    particles[i].y += particles[i].ty;
                canvas.setPixel32(particles[i].x, particles[i].y, 0xffff0000);
                if(particles[i].x > WIDTH || particles[i].x <0 || particles[i].y > HEIGHT || particles[i].y < 0) particles.splice(i, 1);
                }
                fxbmd.lock();
                fxbmd.draw(canvas);
                fxbmd.colorTransform(rect, cTrs2);
                fxbmd.applyFilter(fxbmd, rect, point, blur);
                fxbmd.unlock();
            canvas.unlock();
            if(particles.length < PARTICLE_MAX/2) createParticle();
        }
    }
}


    
class Particle {
    public var x:Number;
    public var y:Number;
    public var tx:Number;
    public var ty:Number;
    public var g:Number;
    public var c:Number;
}