flash on 2013-8-23
♥0 |
Line 125 |
Modified 2013-08-23 07:59:43 |
MIT License
archived:2017-03-20 05:28:01
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
}
}