Fork me on GitHub

Logo firework

Flash required: You need version 10 or later of the free Flash player from Adobe to use this content. To download and install the free player from Adobe's web site click here.

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>