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の練習

StarDustの練習
Get Adobe Flash player
by Rhymester_0601 21 Oct 2010
/**
 * 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;
    }
}