イベントを管理するクラス

09.03.05 Thu 17:46
Category: actionscript
Tags:

外部から読み込んだ 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();
}

みたいにしておくと、アンロードしたときに全てのイベントリスナーが解除される。

eventmanager.zip

©2012 l00oo.oo00l blog | powered by WordPress with Barecity