StarDustの練習
StarDustの練習
/**
* Copyright Rhymester_0601 ( http://wonderfl.net/user/Rhymester_0601 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/cSas
*/
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
import idv.cjcat.stardust.common.actions.*;
import idv.cjcat.stardust.common.actions.triggers.DeathTrigger;
import idv.cjcat.stardust.common.clocks.*;
import idv.cjcat.stardust.common.emitters.Emitter;
import idv.cjcat.stardust.common.initializers.*;
import idv.cjcat.stardust.common.math.*;
import idv.cjcat.stardust.common.renderers.*;
import idv.cjcat.stardust.twoD.actions.*;
import idv.cjcat.stardust.twoD.emitters.*;
import idv.cjcat.stardust.twoD.initializers.*;
import idv.cjcat.stardust.twoD.renderers.*;
import idv.cjcat.stardust.twoD.zones.*;
/**
* StarDustの練習
*
* @author Rhymester_0601
*/
public class StarDustSample extends Sprite
{
/*======================================================================*//**
* 変数
*/
private var clock:ImpulseClock;
private var emitter:Emitter2D;
private var singlePoint:SinglePoint = new SinglePoint();
/*======================================================================*//**
* コンストラクタ
*/
public function StarDustSample()
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
/*======================================================================*//**
* 初期化関数
*/
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// パーティクルを格納するスプライトを作成。
var container:Sprite = new Sprite();
container.graphics.beginFill(0);
container.graphics.drawRect(0, 0, 465, 465);
container.graphics.endFill();
addChild(container);
// 1ステップに発生させたい数値を指定
clock = new ImpulseClock(1);
// エミッターを作成
emitter = new Emitter2D(clock);
// レンダラーを作成
var renderer:DisplayObjectRenderer = new DisplayObjectRenderer(container);
renderer.addEmitter(emitter);
//-- 初期化
emitter.addInitializer(new DisplayObjectClass(ColorRectangle)); // パーティクルのアイテムを指定
emitter.addInitializer(new Position(singlePoint)); // パーティクルの位置を指定
emitter.addInitializer(new Life(new UniformRandom(50, 0)));// パーティクルのライフを指定
emitter.addInitializer(new Velocity(new LazySectorZone(1, 1))); // パーティクルにかかる力を指定
//-- アクションを作成
var compositeAction:CompositeAction = new CompositeAction();
compositeAction.mask = 1 | 2; // マスクを指定
compositeAction.addAction(new Move());
compositeAction.addAction(new DeathLife()); // 消えるを有効化
compositeAction.addAction(new Age()); // 寿命を有効化
compositeAction.addAction(new ScaleCurve(0, 10)); // スケール変化を有効化
compositeAction.addAction(new Damping(0.1)); // 減速を有効化
//-- パーティクルが死んだときに出すスポーンを作成
var spawn:Spawn = new Spawn(new UniformRandom(5, 0)); // スポーンを作成
spawn.addInitializer(new DisplayObjectClass(ColorRectangle2)); // パーティクルのアイテムを指定
spawn.addInitializer(new Mask(2)); // マスクを指定
spawn.addInitializer(new Life(new UniformRandom(20, 10))); // パーティクルのライフを指定
spawn.addInitializer(new Velocity(new LazySectorZone(8, 1))); // パーティクルにかかる力を指定
spawn.addInitializer(new Scale(new UniformRandom(0.2, 0.5)));// パーティクルのスケール値を指定
//-- パーティクルが死んだときに呼び出されるトリガーを作成
var trigger:DeathTrigger = new DeathTrigger();
trigger.mask = 1;
trigger.addAction(spawn);
//--エミッターに登録
emitter.addAction(compositeAction);
emitter.addAction(trigger);
//--マウスムーブイベントの登録
stage.addEventListener(MouseEvent.MOUSE_MOVE, mousemovehandler);
//--エンターフレームイベントの登録
addEventListener(Event.ENTER_FRAME, enterframehandler);
}
/*======================================================================*//**
* マウスが動いたときに矩形を作成
*/
private function mousemovehandler(e:MouseEvent):void
{
clock.impulse();
}
/*======================================================================*//**
* 描画
*/
private function enterframehandler(e:Event):void
{
singlePoint.x = mouseX;
singlePoint.y = mouseY;
emitter.step();
}
}
}
/**
* 大きな矩形
*/
import flash.display.*;
import frocessing.color.ColorHSV;
class ColorRectangle extends Sprite
{
static private var col:int = 0;
public function ColorRectangle()
{
var color:ColorHSV = new ColorHSV(col += 5);
var size:int = Math.random() * 20 + 10;
graphics.beginFill( color.value);
graphics.drawRect(-size/2, -size/2, size, size);
blendMode = BlendMode.ADD;
}
}
/**
* 小さな矩形
*/
import flash.display.*;
import frocessing.color.ColorHSV;
class ColorRectangle2 extends Sprite
{
static private var col:int = 0;
public function ColorRectangle2()
{
var color:ColorHSV = new ColorHSV(col += 1);
var size:int = Math.random() * 20 + 10;
graphics.beginFill( color.value);
graphics.drawRect(-size/2, -size/2, size, size);
blendMode = BlendMode.ADD;
}
}