オブジェクトが階層化されていると、子から親にイベントが伝播されます。
子オブジェクトのみでイベントを止めたい場合には、EventクラスのstopPropagation()メソッドを使います。
ステージと配置されているムービークリップは、
(上位、親側) stage – MC1 – MC2 – MC3 (下位、子側)
のような親子関係になっています。
package { import flash.display.MovieClip; import flash.events.MouseEvent; public class EventTest02 extends MovieClip { var mc:MC1 = new MC1(); public function EventTest02() { this.stage.addEventListener(MouseEvent.CLICK, onClickStage); mc.x = this.stage.stageWidth / 2; mc.y = this.stage.stageHeight / 2; this.addChild(mc); } function onClickStage(e:MouseEvent):void { trace('onClickStage\n'); } } }
package { import flash.display.MovieClip; import flash.events.MouseEvent; public class MC1 extends MovieClip { public function MC1() { this.addEventListener(MouseEvent.CLICK, onClickMC1); } function onClickMC1(e:MouseEvent):void { trace('onClickMC1'); } } }
package { import flash.display.MovieClip; import flash.events.MouseEvent; public class MC2 extends MovieClip { public function MC2() { this.addEventListener(MouseEvent.CLICK, onClickMC2); } function onClickMC2(e:MouseEvent):void { trace('onClickMC2'); e.stopPropagation(); } } }
package { import flash.display.MovieClip; import flash.events.MouseEvent; public class MC3 extends MovieClip { public function MC3() { this.addEventListener(MouseEvent.CLICK, onClickMC3); } function onClickMC3(e:MouseEvent):void { trace('onClickMC3'); } } }
MC2クラスのイベントハンドラ(onClickMC2)にのみ、イベントの伝播を止めるためのstopPropagation()メソッドを入れてあります。
MC3をクリックすると、
onClickMC3
onClickMC2
MC2をクリックすると、
onClickMC2
MC1をクリックすると、
onClickMC1
onClickStage
ステージをクリックすると、
onClickStage
のように、Flashの出力ウィンドウに表示されます。
子から親へのイベントは、MC2のイベントハンドラーで止まっていることが分かります。
ソースファイルは、こちらからダウンロード
コメントを残す
コメントを投稿するにはログインしてください。