stardust マウス移動でパーティクル

パーティクルライブラリの 「stardust」を以前からちょくちょく触っていたのですが、正直あんまし理解していのですが、いろいろ作って覚えていこうと思ってます。

今回、試しにマウスムーブ時にパーティクルを発生させるために「impluseClock」を使用。

mouseMain.as

public class mouseMain extends MovieClip{

		private var emitter:mouseMoveEmitter;
		private var c:ImpulseClock;
		private var centerx:Number;
                
               //コンストラクター
		public function mouseMain() {
                        //ImpulseClockで1ステップに5つのパーティクルを発生
			c= new ImpulseClock(5,1);
			emitter = new mouseMoveEmitter(c);
			
		}

MouseEvent.MOUSE_MOVEイベントでエミッターの「impulse」インパルスメソッドを呼び出す

ちなみに下記のマウスイベントはステージの中央のどちらかによってx軸の重力を左右に分けている

public class mouseMain extends MovieClip{

		private var emitter:mouseMoveEmitter;
		private var c:ImpulseClock;
		private var centerx:Number;
                
               //コンストラクター
		public function mouseMain() {
                        //ImpulseClockで1ステップに5つのパーティクルを発生
			c= new ImpulseClock(5,1);
			emitter = new mouseMoveEmitter(c);
			~省略~
        stage.addEventListener(MouseEvent.MOUSE_MOVE, movehandler);
		}
       //マウスムーブでインパスルメソッドを呼び出す
       private function movehandler(e:MouseEvent):void {
			if (mouseX > centerx) {
				mouseMoveEmitter(emitter).field.x = 0.3;
				}else {
					mouseMoveEmitter(emitter).field.x = -0.3;
					}
         //impulseメソッドの呼び出し           
		  c.impulse();					
		}

パーティクルの発生位置をマウスの位置にする

パーティクルの発生位置をマウスの位置にするにはEmitterクラスのaddInitializerで「Posigion」設定(発生地)を設定するときに、singlePointを設定してなおかつMainクラスでこのsinglePointオブジェクトの「x」と「y」にアクセスできるよにpublicで指定しておく。(getter setter でもいいけど省略)

mouseMoveEmitter.as

public class mouseMoveEmitter extends Emitter2D{
       //アクセスできるようにpublicで指定しておく
		public var point:SinglePoint = new SinglePoint();
		
		public function mouseMoveEmitter(clock:Clock) {
			super(clock);
			//
			//
			addInitializer(new Position(point));
           
         ~以下省略~

その後、MainのクラスのEnterFrame内でsinplePointオブジェクトにマウスの座標を割り当てる

mouseMain.as

private function loop(e:Event):void {
                      //emitteクラスからSinglePointオブジェクトのpointにアクセスして、その「x」と「y」プロパティに割り当てる

			mouseMoveEmitter(emitter).point.x = mouseX;
			mouseMoveEmitter(emitter).point.y = mouseY;
			
			emitter.step();
		}

という感じでざっくりとしたメモ

実行結果

ZIPファイル