イベントを管理するクラス
外部から読み込んだ swf を削除(アンロード)する場合、その swf 内のイベントリスナーは自動で解除されない。
例えば Event.ENTER_FRAME なんかは、発行はされるけどリスナーの参照先は削除されているのでエラーを起こしてしまう。なので手動でイベントリスナーを解除しなければならないんだけど、あちこちでイベントを登録してると全部削除するのが大変なので、イベントを管理するクラスを作ってみた。
使い方はこんな感じ。
//イベント登録 EventManager.addEvent(dispatcher, type, listener); //イベント解除(引数にnullを入れると全てが対象になる。) EventManager.removeEvent(dispatcher, type, listener);
登録するときに addEventListener を使わないで EventManager.addEvent で登録しておけば、EventManager.removeEvent(); で全部一気に解除できる。
全ての Event.ENTER_FRAME だけを解除したい場合は
EventManager.removeEvent(null, Event.ENTER_FRAME, null);
でいける。
削除される swf 側のドキュメントクラスに
EventManager.addEvent(this, Event.REMOVED_FROM_STAGE, removeFromStageListener);
を登録しておいて
private function removeFromStageListener(e:Event):void
{
EventManager.removeEvent();
}
みたいにしておくと、アンロードしたときに全てのイベントリスナーが解除される。
