Fork me on GitHub

Mutual Gravity

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.

This example uses Mutual Gravity to attract the particles to each other. Each particle is attracted to every other particle by a gravitational force.

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

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

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

      var renderer:BitmapRenderer = new BitmapRenderer( new Rectangle( 0, 0, 400, 400 ) );
      renderer.addFilter( new BlurFilter( 2, 2, 1 ) );
      renderer.addEmitter( emitter );
      addChild( renderer );

      emitter.start( );
    }
  }
}
package
{
  import org.flintparticles.common.counters.Blast;
  import org.flintparticles.common.displayObjects.Dot;
  import org.flintparticles.common.initializers.ColorInit;
  import org.flintparticles.common.initializers.SharedImage;
  import org.flintparticles.twoD.actions.BoundingBox;
  import org.flintparticles.twoD.actions.Move;
  import org.flintparticles.twoD.actions.MutualGravity;
  import org.flintparticles.twoD.actions.SpeedLimit;
  import org.flintparticles.twoD.emitters.Emitter2D;
  import org.flintparticles.twoD.initializers.Position;
  import org.flintparticles.twoD.zones.RectangleZone;

  public class MutualG extends Emitter2D
  {
    public function MutualG()
    {
      counter = new Blast( 40 );
      
      addInitializer( new SharedImage( new Dot( 2 ) ) );
      addInitializer( new ColorInit( 0xFFFF00FF, 0xFF00FFFF ) );
      addInitializer( new Position( new RectangleZone( 10, 10, 380, 380 ) ) );

      addAction( new MutualGravity( 10, 500, 3 ) );
      addAction( new BoundingBox( 0, 0, 400, 400 ) );
      addAction( new SpeedLimit( 150 ) );
      addAction( new Move() );
    }
  }
}
import org.flintparticles.common.counters.*;
import org.flintparticles.common.displayObjects.Dot;
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( 40 );

emitter.addInitializer( new SharedImage( new Dot( 2 ) ) );
emitter.addInitializer( new ColorInit( 0xFFFF00FF, 0xFF00FFFF ) );
emitter.addInitializer( new Position( new RectangleZone( 10, 10, 380, 380 ) ) );

emitter.addAction( new MutualGravity( 10, 500, 3 ) );
emitter.addAction( new BoundingBox( 0, 0, 400, 400 ) );
emitter.addAction( new SpeedLimit( 150 ) );
emitter.addAction( new Move() );

var renderer:BitmapRenderer = new BitmapRenderer( new Rectangle( 0, 0, 400, 400 ) );
renderer.addFilter( new BlurFilter( 2, 2, 1 ) );
renderer.addEmitter( emitter );
addChild( renderer );

emitter.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="400" height="400"
  backgroundColor="#000000">
  
<f:BitmapRenderer id="renderer" width="400" height="400">
  <f:preFilters>
    <filters:BlurFilter blurX="2" blurY="2" quality="1"/>
  </f:preFilters>
  <f:emitters>
    <f:Emitter id="emitter" autoStart="true">
      <f:counter>
        <f:Blast startCount="40"/>
      </f:counter>
      <f:initializers>
        <f:Position>
          <f:RectangleZone left="10" right="390" top="10" bottom="390"/>
        </f:Position>
        <f:SharedImage>
          <f:Dot radius="2"/>
        </f:SharedImage>
        <f:ColorInit minColor="0xFFFF00FF" maxColor="0xFF00FFFF"/>
      </f:initializers>
      <f:actions>
        <f:Move/>
        <f:MutualGravity power="10" maxDistance="500" epsilon="3"/>
        <f:SpeedLimit limit="150"/>
        <f:BoundingBox left="0" right="400" top="0" bottom="400"/>
      </f:actions>
    </f:Emitter>
  </f:emitters>
</f:BitmapRenderer>
</s:Application>