package { import flash.display.Sprite; import flash.geom.Point; // twoD の他に threeD がある。 import org.flintparticles.common.initializers.ScaleImageInit; import org.flintparticles.common.displayObjects.RadialDot; import org.flintparticles.common.initializers.ImageClass; import org.flintparticles.twoD.actions.DeathZone; import org.flintparticles.twoD.actions.Move; import org.flintparticles.twoD.actions.RandomDrift; import org.flintparticles.twoD.initializers.Position; import org.flintparticles.twoD.initializers.Velocity; import org.flintparticles.twoD.renderers.DisplayObjectRenderer; import org.flintparticles.twoD.zones.LineZone; import org.flintparticles.common.counters.Steady; import org.flintparticles.twoD.emitters.Emitter2D; import org.flintparticles.twoD.zones.PointZone; import org.flintparticles.twoD.zones.RectangleZone; public class SnowDocumentClass extends Sprite { public function SnowDocumentClass() { /* パーティクルの管理者 (http://2px.cc/2blog/2008/04/emitter.html) (http://2px.cc/2blog/2008/06/flintversion103.html) */ var emitter:Emitter2D = new Emitter2D(); //パーティクルをどのように放つか? (http://2px.cc/2blog/2008/03/flintcounters.html) emitter.counter = new Steady(150); // emitter に、さまざまな初期設定を加えていく。 (http://2px.cc/2blog/2008/03/flintinitializers.html) // /* パーティクル自体の DisplayObject を Class で指定。 2 は RadialDot に渡す引数 (http://2px.cc/2blog/2008/03/flintdisplayobjects.html) (http://2px.cc/2blog/2008/03/post-3.html) */ emitter.addInitializer(new ImageClass(RadialDot, 2)); /* パーティクルの初期位置 (Position(zone:Zone))、パーティクルの速度 (Velocity(zone:Zone)) (http://2px.cc/2blog/2008/03/flintzones.html) 速度(Velocity) を範囲(Zone) で表す */ emitter.addInitializer(new Position(new LineZone(new Point(0, -5), new Point(stage.stageWidth, -5)))); // X方向は速度0、Y方向は速度65 emitter.addInitializer(new Velocity(new PointZone(new Point(0, 65)))); // パーティクルの拡大率 (ScaleImageInit(minScale:Number, maxScale:Number)) emitter.addInitializer(new ScaleImageInit(0.75, 2)); /* emitter に、さまざまな動きをつけていく (http://2px.cc/2blog/2008/03/flintactions.html) (http://2px.cc/2blog/2008/03/flintactions-2.html) (http://2px.cc/2blog/2008/06/flintactions-3.html) */ // ActionやInitializerの設定に基づき、パーティクルを移動させる (http://2px.cc/2blog/2008/03/flintactions.html) emitter.addAction(new Move()); /* パーティクルが対象ゾーン内(外)にある時、パーティクルを消す。 (DeathZone(zone:Zone, zoneIsSafe:Boolean = false)) (http://2px.cc/2blog/2008/03/flintactions.html) trueの時、対象ゾーン外にあるパーティクルを消す。 */ emitter.addAction(new DeathZone(new RectangleZone(0, -5, stage.stageWidth, stage.stageHeight),true)); /* パーティクルにランダムな移動を設定 (RandomDrift(sizeX:Number, sizeY:Number)) (http://2px.cc/2blog/2008/03/flintactions-2.html) */ emitter.addAction(new RandomDrift(20, 20)); /* emitter を表示させるレンダー (http://2px.cc/2blog/2008/06/flintversion103.html) */ // パーティクルを DisplayObject として表示する Renderer (表示者)。 var render:DisplayObjectRenderer = new DisplayObjectRenderer(); // Renderer に Emitter を追加 render.addEmitter(emitter); // Renderer を表示させる addChild(render); // Emitter をスタートさせる。 (http://2px.cc/2blog/2008/04/emitter.html) emitter.start(); /* Emitterを指定時間後にスキップさせます。 runAhead(time:Number, frameRate:Number = 10) (http://2px.cc/2blog/2008/04/emitter.html) サンプルでは 10 */ //emitter.runAhead(10); } } }