In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

[Stardust] Spawn

...
@author paq89
Get Adobe Flash player
by paq 11 Jan 2010
/**
 * Copyright paq ( http://wonderfl.net/user/paq )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/sG5H
 */

// forked from paq's [Stardust] HANABI
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
	import idv.cjcat.stardust.common.clocks.ImpulseClock;
	import idv.cjcat.stardust.common.renderers.Renderer;
	import idv.cjcat.stardust.twoD.emitters.Emitter2D;
	import idv.cjcat.stardust.twoD.renderers.DisplayObjectRenderer;

	/**
	 * ...
	 * @author paq89
	 */
	[SWF( width=465, height=465, frameRate=60, backgroundColor=0xFFFFFF)]
	public class Main extends Sprite
	{
		private var emitter:Emitter2D;
		private var renderer:Renderer;
		private var container:Sprite;
		private var clock:ImpulseClock;

		public function Main()
		{
			// パーティクルを格納するスプライトを作成。
			container = new Sprite();
			addChild(container);

			// clock.impulse()が呼び出された時に発生するパーティクルの数
			clock = new ImpulseClock(1);
			// エミッターを作成
			emitter = new MyEmitter(clock, container);
			// レンダラーを作成
			renderer = new DisplayObjectRenderer(container);
			renderer.addEmitter(emitter);
			
			// Timer を使って一定期間ごとにパーティクルを作成
			var timer:Timer = new Timer(1000);
			timer.addEventListener(TimerEvent.TIMER, tick);
			timer.start();
			tick(null);
			
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		
		private function onEnterFrame(e:Event):void
		{
			emitter.step();
		}
		
		private function tick(e:TimerEvent):void 
		{
			// パーティクル作成
			clock.impulse();
		}
	}
}
 
import flash.display.*;
import flash.events.Event;
import idv.cjcat.stardust.common.actions.Action;
import idv.cjcat.stardust.common.actions.Age;
import idv.cjcat.stardust.common.actions.CompositeAction;
import idv.cjcat.stardust.common.actions.DeathLife;
import idv.cjcat.stardust.common.actions.ScaleCurve;
import idv.cjcat.stardust.common.actions.triggers.ActionTrigger;
import idv.cjcat.stardust.common.actions.triggers.DeathTrigger;
import idv.cjcat.stardust.common.actions.triggers.LifeTrigger;
import idv.cjcat.stardust.common.clocks.Clock;
import idv.cjcat.stardust.common.events.ActionEvent;
import idv.cjcat.stardust.common.initializers.Life;
import idv.cjcat.stardust.common.initializers.Mask;
import idv.cjcat.stardust.common.initializers.Scale;
import idv.cjcat.stardust.common.math.UniformRandom;
import idv.cjcat.stardust.twoD.actions.Damping;
import idv.cjcat.stardust.twoD.actions.Gravity;
import idv.cjcat.stardust.twoD.actions.Move;
import idv.cjcat.stardust.twoD.actions.Spawn;
import idv.cjcat.stardust.twoD.emitters.Emitter2D;
import idv.cjcat.stardust.twoD.fields.UniformField;
import idv.cjcat.stardust.twoD.initializers.DisplayObjectClass;
import idv.cjcat.stardust.twoD.initializers.DisplayObjectParent;
import idv.cjcat.stardust.twoD.initializers.Position;
import idv.cjcat.stardust.twoD.initializers.Velocity;
import idv.cjcat.stardust.twoD.zones.LazySectorZone;
import idv.cjcat.stardust.twoD.zones.SinglePoint;

/**
 * エミッター
 * @author paq
 */
class MyEmitter extends Emitter2D
{
	public function MyEmitter(clock:Clock, container:Sprite)
	{
		super(clock);
		
		//-- イニシャライザーを追加
		addInitializer(new DisplayObjectParent(container)); // 
		addInitializer(new DisplayObjectClass(Dust)); // パーティクルのアイテムを指定
		addInitializer(new Position(new SinglePoint(465 / 2, 465 / 2))); // パーティクルの位置を指定
		addInitializer(new Velocity(new LazySectorZone(15, 3))); // パーティクルにかかる力を指定
		addInitializer(new Life(new UniformRandom(50, 10))); // パーティクルのライフを指定
		addInitializer(new Scale(new UniformRandom(2, 0.1))); // パーティクルのスケールを指定
		
		//-- アクションを作成
		var actions:CompositeAction = new CompositeAction();
		actions.mask = 1 | 2;
		actions.addAction(new Age()); // 寿命を有効化
		actions.addAction(new DeathLife()); // 消えるを有効化
		actions.addAction(new Move()); // 移動を有効化
		actions.addAction(new ScaleCurve(0, 10)); // スケール変化を有効化
		actions.addAction(new Damping(0.07)); // 減速を有効化
		addAction(actions);
		
		//-- スポーンを作成
		var spawn:Spawn = new Spawn(new UniformRandom(1, 0)); // スポーンを作成
		spawn.addInitializer(new Mask(2)); // マスクを指定
		spawn.addInitializer(new DisplayObjectClass(Dust2)); // パーティクルのアイテムを指定
		spawn.addInitializer(new Velocity(new LazySectorZone(10, 2))); // パーティクルにかかる力を指定
		spawn.addInitializer(new Life(new UniformRandom(40, 15))); // パーティクルの開始ライフを指定
		spawn.addInitializer(new Scale(new UniformRandom(1, 0.4))); // パーティクルの開始スケール値を指定
		addAction(spawn);
	}
}

/**
 * パーティクル
 * @author paq
 */
import flash.display.Sprite;
import frocessing.color.ColorHSV;

class Dust extends Sprite {
	static private var col:int = 180;
	public function Dust() {
		var color:ColorHSV = new ColorHSV(col+=2, 0.7);
		graphics.beginFill(color.value, 0.5);
		graphics.drawCircle(0, 0, 16);
		graphics.beginFill(color.value, 1);
		graphics.drawCircle(0, 0, 8);
		blendMode = BlendMode.ADD;
	}
}

class Dust2 extends Sprite {
	static private var col:int = 100;
	public function Dust2() {
		var color:ColorHSV = new ColorHSV(col+=1, 0.7);
		graphics.beginFill(color.value, 0.5);
		graphics.drawCircle(0, 0, 16);
		//blendMode = BlendMode.ADD;
	}
}