パーティクルライブラリの 「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();
}
という感じでざっくりとしたメモ