In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: Mainオブジェクトがマウスイベントを受け取らない?

Mainオブジェクトがマウスイベントを受け取らない理由が知りたいです・・・。
* 良かったらコメントかforkで教えてもらえないでしょうか。
*
* -------------
* チェック項目
* 1. Main自身のgraphicsはマウスイベントを受け取らないから?
* 2. 子オブジェクト内のgraphicsはイベントを受け取るか?
* 3. 子オブジェクトは子オブジェクト内のgraphicsからのイベントを受け取るか?
*
* 結果
* 1. Yes(graphicsは反応しないが,TextFrameには反応する)
* 2. Yes(矩形を描画した子Spriteを右に追加したところ,反応する)
* 3. Yes(tf2に子Sprite自身のイベントの結果を表示させると,できた)
*
* 結論
* Sprite自身のgraphicsに反応しない訳ではない。
* ただし,MainのSprite内では反応しない可能性あり。
*(結論になってなくてすいません)
* -------------
Get Adobe Flash player
by geko 05 Apr 2010
    Embed
/**
 * Copyright geko ( http://wonderfl.net/user/geko )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/6nBr
 */

// forked from kihon's Mainオブジェクトがマウスイベントを受け取らない?
/*
 * Mainオブジェクトがマウスイベントを受け取らない理由が知りたいです・・・。
 * 良かったらコメントかforkで教えてもらえないでしょうか。
 *
 * -------------
 * チェック項目
 * 1. Main自身のgraphicsはマウスイベントを受け取らないから?
 * 2. 子オブジェクト内のgraphicsはイベントを受け取るか?
 * 3. 子オブジェクトは子オブジェクト内のgraphicsからのイベントを受け取るか?
 *
 * 結果
 * 1. Yes(graphicsは反応しないが,TextFrameには反応する)
 * 2. Yes(矩形を描画した子Spriteを右に追加したところ,反応する)
 * 3. Yes(tf2に子Sprite自身のイベントの結果を表示させると,できた)
 *
 * 結論
 * Sprite自身のgraphicsに反応しない訳ではない。
 * ただし,MainのSprite内では反応しない可能性あり。
 *(結論になってなくてすいません)
 * -------------
 */

package
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFormat;
 
	public class Main extends Sprite
	{
		private var tf:TextField;
		private var tf2:TextField;
		
		public function Main()
		{
			// 何か描画しておく
			graphics.beginFill(0x0);
			graphics.drawRect(0, 0, 100, 100);
			graphics.endFill();
			
			// 確認用テキスト
			tf = new TextField();
			tf.defaultTextFormat = new TextFormat("", 20, 0x0, true);
			tf.autoSize = "left";
			tf.y = 200;
			addChild(tf);
			
			//追記1:子オブジェクトを作る
			var child:Sprite = new Sprite();
			child.graphics.beginFill(0x0);
			child.graphics.drawRect(150, 0, 100, 100);
			child.graphics.endFill();
			addChild(child);
			
			//追記3:確認用テキスト2
			tf2 = new TextField();
			tf2.defaultTextFormat = new TextFormat("", 20, 0x0, true);
			tf2.autoSize = "left";
			tf2.y = 250;
			addChild(tf2);
			tf.text = "tf";
			tf2.text = "tf2";
			
			// MainオブジェクトにMouseEvent.CLICKイベントを受け取らせるように設定する
			addEventListener(MouseEvent.CLICK, onMouseClick);
			addEventListener(MouseEvent.ROLL_OUT, onMouseClick);
			
			//追記4:子オブジェクトのイベントリスナ
			child.addEventListener(MouseEvent.CLICK, childOnMouseClick);
			child.addEventListener(MouseEvent.ROLL_OUT, childOnMouseClick);
		}
		
		// これが何故か呼ばれない(Mainオブジェクトがマウスイベント発行元にならない)
		private function onMouseClick(event:MouseEvent):void
		{
			if(event.type == MouseEvent.ROLL_OUT){
				tf.text = "tf";
				return;
			}
			tf.text = "tf = Mainがマウスイベントを受け取りました";	
		}
		
		//追記5:子オブジェクトのイベントハンドラ
		private function childOnMouseClick(event:MouseEvent):void
		{
			if(event.type == MouseEvent.ROLL_OUT){
				tf2.text = "tf2";
				return;
			}
			tf2.text = "tf2 = 子がマウスイベントを受け取りました";
		}
	}
}