forked from: [wonderfl] [stardust] particles follow the mouse

by bradsedito forked from [wonderfl] [stardust] particles follow the mouse (diff: 37)
♥0 | Line 72 | Modified 2011-11-21 19:34:50 | MIT License
play

ActionScript3 source code

/**
 * Copyright bradsedito ( http://wonderfl.net/user/bradsedito )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/uXLUH
 */






package 
{
    import flash.display.*;
    import flash.events.*;    
    import idv.cjcat.stardust.common.clocks.SteadyClock;
    import idv.cjcat.stardust.common.emitters.Emitter;
    import idv.cjcat.stardust.common.renderers.Renderer;
    import idv.cjcat.stardust.twoD.renderers.DisplayObjectRenderer;

    [SWF(width=465, height=465, frameRate=48, backgroundColor=0)]
    
    
    public class Main extends Sprite 
    {
        protected var emitter:Emitter; // エミッター
        protected var renderer:Renderer; // レンダラー
        public    var _dust:Dust = new Dust();

        public function Main() 
        {
            addChild( _dust );
            emitter = new MyEmitter(new SteadyClock(1)); // エミッターに1フレームに発生させたい数値を指定
            renderer = new DisplayObjectRenderer(this);
            renderer.addEmitter(emitter);
            
            addEventListener(Event.ENTER_FRAME, loop);
            
            // bg
            graphics.beginFill(0); graphics.drawRect(0,0,465,465);
        }

        // エンターフレームイベント
        private function loop(e:Event):void {
            // パーティクルの発生位置をマウス座標にする
            MyEmitter(emitter).point.x += (mouseX - MyEmitter(emitter).point.x) * 0.1;
            MyEmitter(emitter).point.y += (mouseY - MyEmitter(emitter).point.y) * 0.1;
            // エミッター更新
            emitter.step();
        }
    }
}

import idv.cjcat.stardust.common.actions.*;
import idv.cjcat.stardust.common.clocks.*;
import idv.cjcat.stardust.common.initializers.*;
import idv.cjcat.stardust.common.math.*;
import idv.cjcat.stardust.twoD.actions.*;
import idv.cjcat.stardust.twoD.emitters.*;
import idv.cjcat.stardust.twoD.initializers.*;
import idv.cjcat.stardust.twoD.zones.*;
/**
 * 2Dのエミッター
 * @author yasu
 */
class MyEmitter extends Emitter2D {

    public var point:SinglePoint = new SinglePoint(); // パーティクルの発生位置

    public function MyEmitter(clock:Clock = null) 
    {
        super(clock);
        
        // ------------------------------
        // パーティクルの属性を定義
        // ------------------------------
        addInitializer(new DisplayObjectClass(Dust)); // アイテムを指定
        addInitializer(new Position(point)); // 発生位置
        //addInitializer(new Velocity(new LazySectorZone( 0.00001,0 ))); // 移動距離
        addInitializer(new Life(new UniformRandom( 10,10 ) )); // 生存する領域

        // ------------------------------
        // パーティクルのアクションを定義
        // ------------------------------
        addAction(new Age()); // 寿命を有効化
        addAction(new DeathLife()); // 消えるを有効化
        addAction(new Accelerate(0.2)); // 加速を有効化
        addAction(new Move()); // 移動を有効化
        addAction(new ScaleCurve(1, 7)); // スケール変化を有効化
    }
}

/**
 * パーティクルの飛ばすアイテム
 * @author yasu
 */
import flash.display.*;
import flash.events.*;
import frocessing.color.ColorHSV;

class Dust extends Sprite 
{
    static private var col:int = 180;
    private var color:ColorHSV;
    public function Dust() 
    {
        addEventListener(Event.ENTER_FRAME, loopDust);
        function loopDust( event:Event ):void
        {
            
            color = new ColorHSV( col+=1,0.7 );               
            graphics.beginFill(color.value, 1);
            graphics.drawCircle(20, 20, 20);
            blendMode = BlendMode.ADD;        
        }
    }
}