Tirggerクラスは、jgame.jsのイベント管理を司る重要なクラスです。
一般的なjavascriptのイベントは、イベントの登録元と登録先でthisが異なってしまうという問題が発生しますが、Triggerクラスの場合はイベントハンドラ登録時にthisも一緒に登録する事で、thisが変わってしまうという問題を防いでいます。
また、イベントハンドラはイベントの起動順が重要なケースがありえるため、イベントハンドラを追加するだけでなく、イベントハンドラを特定の箇所に挿入する事も出来るようになっています。
通常利用において、ユーザがTriggerクラスの利用で必ず覚えるべき点は、以下3点です。
1. handleメソッドにてイベントハンドラを追加
2. removeメソッドにてイベントハンドラを削除
3. fireメソッドにてイベントを発行
var trigger = new Trigger();
特にパラメータを指定せず、新しいTriggerクラスのインスタンスを生成します。
Triggerクラスは生成ではなく利用によって型が決まります。どのような利用方法も出来ますが、単純な生成と統一された利用を心がけるべきクラスです。
handlers:TriggerHandler[];//登録されているイベントハンドラ
handleInsert(index:number, owner:any, handler:Function) {
index:number;//イベント挿入位置
owner:any;//イベントハンドラの所有者。イベント起動時のthisになる
handler:Function;//イベントハンドラ本体の関数
イベントハンドラを所定の位置に挿入します。
例えば、that.event.handleInsert(0, this, this.event_handler) とやれば、そのイベントハンドラは必ず一番最初に実行されます。
---
handle(owner:any, handler?:Function) {
owner:any;//イベントハンドラの所有者。イベント起動時のthisになる
handler?:Function;//イベントハンドラ本体の関数
イベントハンドラを登録します。
ownerにhandlerを指定する事で、owner指定を省略する事が出来ます。この際、ownerはwindowオブジェクトになります。
---
removeAll(owner:any) {
owner:any;//削除対象のイベントハンドラの所有者。handleやhandleInsertでのowner引数にあたる
特定所有者のイベントハンドラを全て削除します。
例えばaというクラスが三つのイベントハンドラーを保持していた場合、三つとも全て削除されます。
owner引数はイベントを登録したオブジェクトではなく、handleまたはhandleInsertのowner引数である事に注意して下さい。
---
removeAllByHandler(handler:Function) {
handler:Function;//削除対象のイベントハンドラ
特定のイベントハンドラを全て削除します。
例えば、aというクラスとbというクラスが、1つずつ共通の関数をイベントハンドラとして登録していた場合、その共通の関数を指定すればaもbもイベントハンドラを失う事になります。
---
remove(owner:any, handler?:Function) {
owner:any;//削除対象のイベントハンドラ所有者。handleやhandleInsertでのowner引数にあたる
handler?:Function;//削除対象のイベントハンドラ
イベントハンドラを削除します。
ownerにhandlerを指定する事で、owner指定を省略する事が出来ます。この際、ownerはwindowオブジェクトになります。
---
fire(param?:any) {
param?:any;//イベントパラメータ
イベントを起動します。
このメソッドは安全なイベント起動を保証します。
例えば、3つのイベントハンドラが登録されており、1つ目のイベントハンドラ内で全てのイベントハンドラが削除される処理が実行されたとしても、残り2つも実行されます。
---
fastFire(param?:any) {
param?:any;//イベントパラメータ
イベントを起動します。
このメソッドは安全なイベント起動を保証しません。
例えば、3つのイベントハンドラが登録されており、1つ目のイベントハンドラ内で全てのイベントハンドラが削除された場合、残りのイベントハンドラは起動出来ずに終了します。
名前の通り、fireメソッドよりもやや高速に動作します。
---