Desuade Partigen has an extensive set of features that are built heavily upon the Desuade Motion Package. Take a look at some of the technical specifications for the AS3 particle effect engine:
Overview
- Particle/Emitter Controllers (advanced keyframe-sequencing)
- Tweening or physics for every particle's property
- Full Package XML-Serialization
- Extensive set of Rendering and Pooling options
- Highest-in-class performance and features
- Fully documented AS3 API
- Includes AS3 examples for Partigen and DMP
- Advanced Debugging
- Inheritance-based classes
- Low base file size - 11k (standard component 33k)
- Based upon the Desuade Motion Package architecture
- Engine is Open Source, MIT Licensed, and free
Controllers
- Advanced sequencing simulates timeline-based motion (similar to Flash CS4's Motion Editor)
- Used for both emitter and particle properties
- IDE features a point and click representation with drag and drop keyframes
- Random ranges of values with 'spread'
- KeyframeContainers that store unlimited keyframes (similar to standard timeline keyframes)
- Allows for different eases from keyframe-to-keyframe
- Relative length of tweens based on duration or particle life
- More intuitive and similar to the way Flash is designed than other platforms
- Inherited from the Desuade Motion Package - the highest performance-to-features motion engine ever designed
- Generates (and is configurable by) XML
Emitters
- Creates and holds configuration for particles
- Can be created with either the IDE component or via ActionScript
- Emitters can be manipulated and changed at runtime
- Emits particles automatically at a given rate with 'eps' property
- Can emit particles manually with 'emit()' method
- Each emission can have a 'burst' multiplier
- Emitters can use "prefetching" to start as if they've already been running
- Angle and life properties that can be tweened and controlled
- Manages particles with Controllers, Renderers, & Pools - MVC style
- Start/stop controls
- Generates (and is configurable by) XML
Particles
- Created by and configured through emitters
- Can be any display object or class you desire
- PixelParticles for use with PixelRenderers
- Particles can be grouped together to increase performance
- Particles can be cachedAsBitmaps or blitted
- BlendMode and filters can be dynamically applied
- Unlimited amount of properties - only configure properties you use
- Property values managed by ParticleControllers
- The 'spread' property of Keyframes allows for organic, natural, and random effects
- Particle objets are recycled in system memory automatically managed by Pools
Renderers
- Handle the actual display of particles
- StandardRenderer - displays particles in the same was as standard DisplayObjects
- NullRenderer - no particles are displayed on the screen
- BitmapRenderer - particles are displayed through a Bitmap
- PixelRenderer - particles are single pixels that get shown on a Bitmap
- BitmapCanvas - easily displays an output from a Bitmap/Pixel renderer on the stage
- Bitmap-based renderers increases performance, and have built in blurring and trailing
- Renderers automagically start/stop based on need, simplifying development and maximizing performance
- Renderers can be shared across multiple Emitters
Pools
- Handle the internal creation and storage of Particle objects in memory
- BasicPool - uses object pooling to radically increase performance and memory efficiency
- NullPool - this does no 'real' pooling and simply creates and destroys particles as needed
- SweepPool - removes groups of Particle objects at a given interval
- Can be shared across multiple Emitters
Requirements
- ActionScript 3 (AS3 Only)
- Adobe Flash Player 9/10/10.1 & Mobile
- Adobe Flash CS3/CS4/CS5
- Adobe Extension Manager
- Mac OS X 10.4+
- Windows XP, Vista, 7
AS3 Syntax Examples
//emitters
var my_em:Emitter = new Emitter();
my_em.particle = MyParticleClass;
my_em.eps = 5;
my_em.life = 1;
my_em.start();
var my_em2:Emitter = new Emitter();
my_em2.fromXML(my_em.toXML()).start();
//controllers
my_em.controllers.particle.addTween("x");
my_em.controllers.particle.x.keyframes.begin.value = 0;
my_em.controllers.particle.x.keyframes.add(new Keyframe(.5, 0, 'easeOutQuad', 500));
my_em.controllers.particle.x.keyframes.end.value = 300;
//renderers
var my_nrenderer:NullRenderer = new NullRenderer();
my_em.renderer = my_nrenderer;
my_second_em.renderer = my_nrenderer;
//pools
var my_spool:SweepPool = new SweepPool(Particle, 5000);
my_em.pool = my_spool;