Fork me on GitHub

Rain

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 a simple rain simulation and a collision zone to bounce the rain off the umbrella.

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

  import flash.display.Bitmap;
  import flash.display.Sprite;
  import flash.geom.Rectangle;

  [SWF(width='600', height='400', frameRate='60', backgroundColor='#000000')]
  
  public class Main extends Sprite
  {
    private var emitter:Emitter2D;
    
    public function Main()
    {
      emitter = new Rain();
      
      addChild( new Bitmap( new Image1( 600, 400 ) ) );
      
      var renderer:PixelRenderer = new PixelRenderer( new Rectangle( 0, 0, 600, 400 ) );
      renderer.addEmitter( emitter );
      addChild( renderer );
      
      emitter.start();
      emitter.runAhead( 4, 30 );
    }
  }
}
package
{
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.initializers.AlphaInit;
  import org.flintparticles.twoD.actions.Accelerate;
  import org.flintparticles.twoD.actions.CollisionZone;
  import org.flintparticles.twoD.actions.DeathZone;
  import org.flintparticles.twoD.actions.Move;
  import org.flintparticles.twoD.actions.SpeedLimit;
  import org.flintparticles.twoD.emitters.Emitter2D;
  import org.flintparticles.twoD.initializers.Position;
  import org.flintparticles.twoD.initializers.Velocity;
  import org.flintparticles.twoD.zones.DiscZone;
  import org.flintparticles.twoD.zones.LineZone;
  import org.flintparticles.twoD.zones.RectangleZone;

  import flash.geom.Point;

  public class Rain extends Emitter2D
  {
    public function Rain()
    {
      counter = new Steady( 1000 );
      
      addInitializer( new Position( new LineZone( new Point( -55, -5 ), new Point( 605, -5 ) ) ) );
      addInitializer( new Velocity( new DiscZone( new Point( 60, 400 ), 20 ) ) );
      addInitializer( new AlphaInit( 0.5 ) );
      
      addAction( new Move() );
      addAction( new CollisionZone( new DiscZone( new Point( 245, 275 ), 150 ), 0.3 ) );
      addAction( new DeathZone( new RectangleZone( -60, -10, 610, 410 ), true ) );
      addAction( new Accelerate( 0, 500 ) );
      addAction( new SpeedLimit( 500 ) );
    }
  }
}
import org.flintparticles.common.counters.Steady;
import org.flintparticles.common.initializers.AlphaInit;
import org.flintparticles.twoD.actions.Accelerate;
import org.flintparticles.twoD.actions.CollisionZone;
import org.flintparticles.twoD.actions.DeathZone;
import org.flintparticles.twoD.actions.Move;
import org.flintparticles.twoD.actions.RotateToDirection;
import org.flintparticles.twoD.actions.SpeedLimit;
import org.flintparticles.twoD.emitters.Emitter2D;
import org.flintparticles.twoD.initializers.Position;
import org.flintparticles.twoD.initializers.Velocity;
import org.flintparticles.twoD.renderers.PixelRenderer;
import org.flintparticles.twoD.zones.DiscZone;
import org.flintparticles.twoD.zones.LineZone;
import org.flintparticles.twoD.zones.RectangleZone;

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

var emitter:Emitter2D = new Emitter2D();
emitter.counter = new Steady( 1000 );

emitter.addInitializer( new Position( new LineZone( new Point( -55, -5 ), new Point( 605, -5 ) ) ) );
emitter.addInitializer( new Velocity( new DiscZone( new Point( 60, 400 ), 20 ) ) );
emitter.addInitializer( new AlphaInit( 0.5 ) );

emitter.addAction( new Move() );
emitter.addAction( new CollisionZone( new DiscZone( new Point( 245, 275 ), 150 ), 0.3 ) );
emitter.addAction( new DeathZone( new RectangleZone( -60, -10, 610, 410 ), true ) );
emitter.addAction( new Accelerate( 0, 500 ) );
emitter.addAction( new SpeedLimit( 500 ) );

var renderer:PixelRenderer = new PixelRenderer( new Rectangle( 0, 0, 600, 400 ) );
renderer.addEmitter( emitter );
addChild( renderer );

emitter.start();
emitter.runAhead( 4, 30 );
<?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:mx="library://ns.adobe.com/flex/mx"
  xmlns:f="http://flintparticles.org/2009/flint2d"
  width="600" height="400"
  backgroundColor="#000000">

<s:BitmapImage source="{new Image1( 600, 400 )}" width="600" height="400"/>
<f:PixelRenderer id="renderer" width="600" height="400">
  <f:emitters>
    <f:Emitter id="emitter" autoStart="true" runAheadTime="4" runAheadFrameRate="30">
      <f:counter>
        <f:Steady rate="1000"/>
      </f:counter>
      <f:initializers>
        <f:Position>
          <f:LineZone startX="-55" startY="-5" endX="605" endY="-5"/>
        </f:Position>
        <f:Velocity>
          <f:DiscZone centerX="60" centerY="400" outerRadius="20"/>
        </f:Velocity>
        <f:AlphaInit alpha="0.5"/>
      </f:initializers>
      <f:actions>
        <f:Move/>
        <f:DeathZone zoneIsSafe="true">
          <f:RectangleZone left="-60" right="610" top="-10" bottom="410"/>
        </f:DeathZone>
        <f:Accelerate x="0" y="500"/>
        <f:SpeedLimit limit="500"/>
        <f:CollisionZone bounce="0.3">
          <f:DiscZone centerX="245" centerY="275" outerRadius="150"/>
        </f:CollisionZone>
      </f:actions>
    </f:Emitter>
  </f:emitters>
</f:PixelRenderer>
</s:Application>