Welcome, Guest
Want to take part in these discussions? Sign in if you have an account, or apply for one below
-
- CommentAuthorMihaPro
- CommentTimeJan 8th 2011 edited
???????????? ????? ???:
var pool:DisplayObjectsPool2D = new DisplayObjectsPool2D();
...
emitter1.addInitializer(new PooledImageClass2D(pool, Dot, 1,16777215,"normal"));
...
emitter2.addInitializer(new PooledImageClass2D(pool, RadialDot));
One pool can be used for different classes inherited of DisplayObject.
Source code:
File DisplayObjectsPool2D.as:package
{
import flash.display.DisplayObject;
import flash.utils.Dictionary;
import flash.utils.getQualifiedClassName;
import org.flintparticles.common.particles.Particle;
import org.flintparticles.twoD.particles.Particle2D;
import org.flintparticles.twoD.particles.ParticleCreator2D;
/**
* Factory for creating Image for particles from pool.
* @author MihaPro
*/
public class DisplayObjectsPool2D extends ParticleCreator2D
{
public var dict:Dictionary = new Dictionary;
public function DisplayObjectsPool2D()
{
}
override public function disposeParticle(particle:Particle):void
{
// ?????? ???????? ? ???
RecycleImage(Particle2D(particle));
super.disposeParticle(particle);
}
private function RecycleImage(p:Particle2D):void
{
var image_class:Class = p.image.constructor as Class;
var v:Vector.<*> = dict[image_class];
if (!v)
{
v = new Vector.<*>();
dict[image_class] = v;
}
v.push(p.image);
p.image = null;
}
public function GetImage(for_class:Class):*
{
var v:Vector.<*> = dict[for_class];
if (v && v.length) return v.pop();
return null;
}
public function Clear():void
{
dict = new Dictionary();
}
}
}
File PooledImageClass2D.as:package
{
import org.flintparticles.common.emitters.Emitter;
import org.flintparticles.common.initializers.InitializerBase;
import org.flintparticles.common.particles.Particle;
import org.flintparticles.common.utils.construct;
import org.flintparticles.twoD.emitters.Emitter2D;
/**
* Pooled image class.
* @author MihaPro
*/
public class PooledImageClass2D extends InitializerBase
{
private var _imageClass:Class;
private var _parameters:Array;
protected var pool:DisplayObjectsPool2D;
public function PooledImageClass2D(_pool:DisplayObjectsPool2D, imageClass:Class, ...parameters)
{
pool = _pool;
_imageClass = imageClass;
_parameters = parameters;
}
override public function addedToEmitter(emitter:Emitter):void
{
super.addedToEmitter(emitter);
Emitter2D(emitter).particleFactory = pool;
}
override public function initialize(emitter:Emitter, particle:Particle):void
{
particle.image = pool.GetImage(_imageClass);
if(!particle.image) // if not in pool
particle.image = construct( _imageClass, _parameters );
}
}
} -
- CommentAuthorRichard
- CommentTimeJan 18th 2011
That should be useful. Thank you.
1 to 2 of 2
