キリンとカバが無性に見たい!
お仕事だらけで人に囲まれーの、PCに向かいーのな状態でいるとついついそんな気分になります。
さて、今日はちょっとActionScriptレベルアップしました。覚えるのがめんどくさいので見ぬ振りをしていたのですが、
あるボタンを押すとムービー内のオブジェクトが一斉に動き出すとか、そんなことをやりたい場合、オブジェクトの配列をつくりforループでひとつずつの関数を実行するってのが地味なやり方をしてましたが、これをやってると、オブジェクトの発生のタイミングによってはその配列から漏れたりすることになります。ようやく、カスタムイベント発行の仕組みを理解できました。
簡単に言うとあるオブジェクトが自分自身をだれかイベントが発生すると教えてくれる(モーニングコールしてくれる人みたいな)オブジェクトへ登録しておき、イベントが発生すると登録してあるオブジェクト全てへ通知する仕組み。(簡単じゃないな)
まずは、イベント発行をするクラス。
MyCustomEventTarget.as
import mx.events.EventDispatcher;
class MyCustomEventTarget {
private var className:String = "MyCustomEventTarget ";
var addEventListener:Function;
var removeEventListener:Function;
private var dispatchEvent:Function;
function MyCustomEventTarget () {
EventDispatcher.initialize(this);
}
function toString():String {
return className;
}
function dispatchFunctionA():Void {
dispatchEvent({type:"functionA"});
}
}
でもってイベント登録と受け取り後の実行をするクラス。
MyEventListener.as
class MyEventListener{
function MyEventListener(eventTarget:Object){
eventTarget.addListener("functionA",this);
}
function functionA(){
trace("execute!")
}
}
フレームアクション
var target:MyCustomEventTarget = new MyCustomEventTarget(); var myObjA:MyEventListener = new MyEventListener(target); var myObjB:MyEventListener = new MyEventListener(target); var myObjC:MyEventListener = new MyEventListener(target); . . .
って感じでオブジェクトを作ってしまえば、好きなタイミングで
target.dispatchFunctionA
を実行することで、myObjA,B,C…のfunctionAが実行されます。