MovieClipには、マウスオーバー時とかロード時に呼ばれる各種イベントハンドラがありますが、
デフォルトではハンドラメソッドは1つしかないため、既に定義が行われている場合に新規で
ハンドラを付けると、上書きされてしまいます。
//引数のMCに、マウスリリース時のハンドラをつける public function addHandler(mc:MoveiClip):Void{ mc.onRelease = function(){ trace("上書き"); } }
この場合、次のようなコードにすると、既存のハンドラを上書きせずに両方動作させることが出来ます。
public function addHandler(mc:MoveiClip):Void{ if(mc.onRelease != null){ mc.oldOnRelease = mc.onRelease//既存のメソッドをoldOnReleaseという名前に付け替え } mc.onRelease = function(){ trace("上書き"); if(this.oldOnRelease != null){ this.oldOnRelease();//付け替えたメソッドを呼ぶ } } }
付け足したハンドラを1度だけ動作させたい場合は、
public function addHandler(mc:MoveiClip):Void{ if(mc.onRelease != null){ mc.oldOnRelease = mc.onRelease;//既存のメソッドをoldOnReleaseという名前に付け替え } mc.onRelease = function(){ trace("上書き"); this.onRelease=undefined; if(this.oldOnRelease != null){ this.oldOnRelease();//付け替えたメソッドを呼ぶ this.onRelease = this.oldOnRelease; this.oldOnRelease = undefined;//元に戻して消去 } } }
とやるとOKです。動作的にはアスペクトのような感じになります。
ただし、これはちょっとした動作を追記したいときに有効なテクなので、
本格的に複数のイベントハンドラを登録したい場合は、
mx.events.EventDispatcherクラスの利用がおすすめです。
mx.events.EventDispatcher.initialize(ハンドラを付けたいMC)
とやると、addEventHandlerというメソッドがMCに追加されますので、このメソッドを
使って複数のリスナーを登録することが出来るようになります。