forked from: [wonderfl] [stardust] particles follow the mouse
forked from [wonderfl] [stardust] particles follow the mouse (diff: 37)
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;
}
}
}