Flint Particle System Forum - Pool for DisplayObject2011-12-11T01:48:21+00:00http://flintparticles.org/forum/
Lussumo Vanilla & Feed Publisher
Pool for DisplayObjecthttp://flintparticles.org/forum/comments.php?DiscussionID=443&Focus=1506#Comment_15062011-01-08T18:27:58+00:002011-01-18T08:28:55+00:00MihaProhttp://flintparticles.org/forum/account.php?u=456
???????????? ????? ???:
var pool:DisplayObjectsPool2D = new DisplayObjectsPool2D();
...
emitter1.addInitializer(new PooledImageClass2D(pool, Dot, ...
???????????? ????? ???:
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.
/** * 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(); } }
/** * 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 ); } } }]]>
Pool for DisplayObjecthttp://flintparticles.org/forum/comments.php?DiscussionID=443&Focus=1513#Comment_15132011-01-18T08:29:31+00:002011-12-11T01:48:21+00:00Richardhttp://flintparticles.org/forum/account.php?u=1
That should be useful. Thank you.