Logo firework

Because the initial velocity for particles is based on a zone, and because we can make zones from bitmap data objects and display objects, it’s relatively easy to create effects like the one above. The initial velocity for the particles uses a zone derived from the logo image. Add a little gravity and blur and this is the result.

package
{
  import org.flintparticles.twoD.emitters.Emitter2D;
  import org.flintparticles.twoD.renderers.PixelRenderer;

  import flash.display.Sprite;
  import flash.filters.BlurFilter;
  import flash.filters.ColorMatrixFilter;
  import flash.geom.Rectangle;

  [SWF(width='500', height='300', frameRate='60', backgroundColor='#000000')]
  
  public class Main extends Sprite
  {
    private var emitter:Emitter2D;
    
    public function Main()
    {
      emitter = new LogoFirework();

      var renderer:PixelRenderer = new PixelRenderer( new Rectangle( 0, 0, 500, 300 ) );
      renderer.addFilter( new BlurFilter( 2, 2, 1 ) );
      renderer.addFilter( new ColorMatrixFilter( [ 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0.96,0 ] ) );
      renderer.addEmitter( emitter );
      addChild( renderer );
      
      emitter.x = 250;
      emitter.y = 300;
      emitter.start( );
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.actions.Fade;
  import org.flintparticles.common.counters.Blast;
  import org.flintparticles.common.easing.Quadratic;
  import org.flintparticles.common.events.EmitterEvent;
  import org.flintparticles.common.initializers.ColorInit;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.twoD.actions.Accelerate;
  import org.flintparticles.twoD.actions.LinearDrag;
  import org.flintparticles.twoD.actions.Move;
  import org.flintparticles.twoD.emitters.Emitter2D;
  import org.flintparticles.twoD.initializers.Position;
  import org.flintparticles.twoD.initializers.Velocity;
  import org.flintparticles.twoD.zones.BitmapDataZone;
  import org.flintparticles.twoD.zones.DiscZone;

  import flash.geom.Point;

  public class LogoFirework extends Emitter2D
  {
    public function LogoFirework()
    {
      counter = new Blast( 4000 );
      
      addInitializer( new ColorInit( 0xFFFF3300, 0xFFFFFF00 ) );
      addInitializer( new Lifetime( 6 ) );
      addInitializer( new Position( new DiscZone( new Point( 0, 0 ), 10 ) ) );
      addInitializer( new Velocity( new BitmapDataZone( new Logo( 265, 80 ), -132, -300 ) ) );
      
      addAction( new Age( Quadratic.easeIn ) );
      addAction( new Fade( 1.0, 0 ) );
      addAction( new Move() );
      addAction( new LinearDrag( 0.5 ) );
      addAction( new Accelerate( 0, 70 ) );
      
      addEventListener( EmitterEvent.EMITTER_EMPTY, restart, false, 0, true );
    }
    
    public function restart( ev:EmitterEvent ):void
    {
      Emitter2D( ev.target ).start();
    }
  }
}


import org.flintparticles.common.actions.*;
import org.flintparticles.common.counters.*;
import org.flintparticles.common.easing.Quadratic;
import org.flintparticles.common.events.EmitterEvent;
import org.flintparticles.common.initializers.*;
import org.flintparticles.twoD.actions.*;
import org.flintparticles.twoD.emitters.Emitter2D;
import org.flintparticles.twoD.initializers.*;
import org.flintparticles.twoD.renderers.*;
import org.flintparticles.twoD.zones.*;  

var emitter:Emitter2D = new Emitter2D();
emitter.counter = new Blast( 4000 );

emitter.addInitializer( new ColorInit( 0xFFFF3300, 0xFFFFFF00 ) );
emitter.addInitializer( new Lifetime( 6 ) );
emitter.addInitializer( new Position( new DiscZone( new Point( 0, 0 ), 10 ) ) );
emitter.addInitializer( new Velocity( new BitmapDataZone( new Logo( 265, 80), -132, -300 ) ) );      

emitter.addAction( new Age( Quadratic.easeIn ) );
emitter.addAction( new Fade( 1.0, 0 ) );
emitter.addAction( new Move() );
emitter.addAction( new LinearDrag( 0.5 ) );
emitter.addAction( new Accelerate( 0, 70 ) );

emitter.addEventListener( EmitterEvent.EMITTER_EMPTY, restart, false, 0, true );

var renderer:PixelRenderer = new PixelRenderer( new Rectangle( 0, 0, 500, 300 ) );
renderer.addFilter( new BlurFilter( 2, 2, 1 ) );
renderer.addFilter( new ColorMatrixFilter( [ 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0.96,0 ] ) );
renderer.addEmitter( emitter );
addChild( renderer );

emitter.x = 250;
emitter.y = 300;
emitter.start( );
    
function restart( ev:EmitterEvent ):void
{
  Emitter2D( ev.target ).start();
}
<?xml version="1.0" encoding="utf-8"?>
<s:Application
  xmlns:fx="http://ns.adobe.com/mxml/2009" 
  xmlns:s="library://ns.adobe.com/flex/spark" 
  xmlns:f="http://flintparticles.org/2009/flint2d"
  xmlns:filters="flash.filters.*"
  width="500" height="300"
  backgroundColor="#000000">
  
<fx:Script>
  <![CDATA[
    import org.flintparticles.common.easing.Quadratic;
  ]]>
</fx:Script>

<f:PixelRenderer id="renderer" width="500" height="300">
  <f:preFilters>
    <filters:BlurFilter blurX="2" blurY="2" quality="1"/>
    <filters:ColorMatrixFilter matrix="{[ 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0.96,0 ]}"/>
  </f:preFilters>
  <f:emitters>
    <f:Emitter id="emitter" autoStart="true" x="250" y="300" emitterEmpty="emitter.start()">
      <f:counter>
        <f:Blast startCount="4000"/>
      </f:counter>
      <f:initializers>
        <f:Position>
          <f:DiscZone centerX="0" centerY="0" outerRadius="10"/>
        </f:Position>
        <f:ColorInit minColor="0xFFFF3300" maxColor="0xFFFFFF00"/>
        <f:Lifetime lifetime="6"/>
        <f:Velocity>
          <f:BitmapDataZone bitmapData="{new Logo( 265, 80 )}" offsetX="-132" offsetY="-300"/>
        </f:Velocity>
      </f:initializers>
      <f:actions>
        <f:Move/>
        <f:Age easing="{Quadratic.easeIn}"/>
        <f:Fade startAlpha="1" endAlpha="0"/>
        <f:LinearDrag drag="0.5"/>
        <f:Accelerate x="0" y="70"/>
      </f:actions>
    </f:Emitter>
  </f:emitters>
</f:PixelRenderer>
</s:Application>