Flint: A Flash AS3 Particle System

September 9, 2009

While doing research into particle generators for a new Action Script 3 Flash project I am working on I came across the Flint Particle System. This library is an open source project with the goal of creating a base framework that is easily extensible by developers to create their own particle behaviors and effects.

I have just begun to utilize the Particle Framework but currently it appears to be very robust with built in support for both 2D and 3D particle systems. For 3D particle systems Flint has support for both the Away3D and Papervision3D libraries, making Flint a highly versatile tool that can be used across diverse projects.

The main power behind this particular particle system is the clean breakup of functionality into distinct elements. To begin we have 3 elements to a Particle System:

Particle
Defines the individual particles within the system.

Emitter
An emitter is responsible for the creation and management of the particles

Renderer
As the name implies the Render is responsible for rendering of the particles.

With these 3 main pieces you are able to create and manage particles within the system. For further control and manipulation of how the system behaves over time actions, activities, initializers, and zones are used.

Actions
An Action defines how the system is modified or how particles act within the system. Some available actions include Gravity, Random Drift, Follow Mouse, and Collision.

Initializers
The Initializer is responsible for modifying particles upon creation which can include modifying their initial position, rotation, velocity, and color.

Activities
Activities define how the emitter changes over time, the most commonly used one is to have the emitter move with the mouse.

Zones
Zones are used by various actions and activities to define a region of space.

On the official Flint website flintparticles.org you can find many examples and a brief tutorial on how to utilize the library within your own Flash Projects. Once I have played around some more with the library i will also post some examples here for everyone to see.