flash on 2013-8-23

by J.J
♥0 | Line 125 | Modified 2013-08-23 07:59:43 | MIT License
play

ActionScript3 source code

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

package  {

    import flash.display.BlendMode;

    import flash.filters.BlurFilter;

    import flash.geom.Vector3D;

    import flash.events.Event;

    import flash.display.BitmapData;

    import flash.display.Bitmap;

    import flash.display.Sprite;



    public class Test_particle extends Sprite {

        private var canvas : Bitmap;

        private var h : Number;

        private var w : Number;

        private var ps : PSystem;

        private var filter : BlurFilter;

        public function Test_particle() {

        

            stage.frameRate=60

            filter=new BlurFilter(1,1)

            w=stage.stageWidth

            h=stage.stageHeight

            canvas=new Bitmap()

            canvas.blendMode=BlendMode.HARDLIGHT

            canvas.bitmapData=new BitmapData(w, h,true,0xff000000)

            addChild(canvas)

            addEventListener(Event.ENTER_FRAME, loop)

            ps=new PSystem(new Vector3D(10,10),canvas.bitmapData)

            

            

        }



        private function loop(event : Event) : void {

         canvas.bitmapData.fillRect(canvas.bitmapData.rect, 0xff000000)

            //canvas.bitmapData.applyFilter(canvas.bitmapData, canvas.bitmapData.rect, canvas.bitmapData.rect.topLeft, filter)

            ps.orign.x=mouseX

            ps.orign.y=mouseY

            ps.addParticle()

        

            ps.render()

            

            

            //canvas.bitmapData.applyFilter(canvas.bitmapData, canvas.bitmapData.rect, canvas.bitmapData.rect.topLeft, filter)

        }

    }

}



import flash.filters.BlurFilter;

import flash.geom.ColorTransform;

import flash.display.Sprite;

import flash.geom.Matrix;

import flash.display.BitmapData;

import flash.geom.Vector3D;

class PSystem{

    public var particles:Vector.<Particle>

    public var orign:Vector3D

    public var len:int

    public var bd:BitmapData

    public var mtrx:Matrix

    public var sp:Sprite

    public var ct:ColorTransform

public function PSystem(_orign:Vector3D,_bd:BitmapData=null):void{

    ct=new ColorTransform()

    

    mtrx=new Matrix()

    sp=new Sprite()

    sp.graphics.beginFill(0xffffff)

    sp.graphics.drawCircle(0, 0, 10)

    sp.graphics.endFill()

    sp.filters=[new BlurFilter(10,10)]

    bd=_bd

    orign=_orign.clone()

    particles=new Vector.<Particle>()

    

    

    

}

public function addParticle():void{

particles.push(new Particle(orign))

}

public function render():void{

len=particles.length

 //trace(len)



for (var i : int = 0; i < len  ; i++) {

    var p:Particle=particles[i];

    if(p)

    {

         p.render()

         

    

    mtrx.d=p.scale

    mtrx.a=p.scale

    mtrx.tx=p.location.x

    mtrx.ty=p.location.y

    ct.alphaMultiplier=p.lifespan

    trace(p.lifespan)

    ct.color=p.color

    bd.draw(sp,mtrx,ct)

    

    }

    if(p.isDead()){

    //p.dispose()    

    particles[i].dispose()

    particles.splice(i, 1)

    

    

    }

    

    //if(len>200) particles.length=0

    len=particles.length

    

}

}

}

import flash.geom.Vector3D;

class Particle{    

    public var location:Vector3D

    public var velocity:Vector3D

    public var acceleration:Vector3D

    public var lifespan:Number

    public var color:uint

    public var scale:Number

    

public function Particle(loc:Vector3D){

    scale=Math.random()

    color=scale*0xffffffff

    location=loc.clone()

    var a:Number=Math.random()*2

    velocity=new Vector3D((a>.5)?a:-a,-Math.random()*10);

    acceleration=new Vector3D(0,.5);

    lifespan=1



}

public function render():void{

    lifespan-=.03

velocity=velocity.add(acceleration);

location=location.add(velocity);



}

public function  isDead():Boolean{

        if(lifespan<0.0) {

            return true;

            }else {

            return false;

            }

    }

    public function dispose():void{

    location=null

    velocity=null

    acceleration=null

    color=0

    scale=NaN

    

    }

}