devlog [naru design]

プログラミングやテクニカルな内容の覚え書き。

オブジェクトが階層化されていると、子から親にイベントが伝播されます。
子オブジェクトのみでイベントを止めたい場合には、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のイベントハンドラーで止まっていることが分かります。

ソースファイルは、こちらからダウンロード

Pocket

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Trackback URL: