サイトトップ

Director Flash 書籍 業務内容 プロフィール

Adobe Flash非公式テクニカルノート

DisplayObjectContainer.mouseChildrenプロパティ

ID: FN0807002 Product: Flash Platform: All Version: CS3/ActionScript 3.0

説明
オブジェクトの子が、マウスに対応するかどうかを決めます。オブジェクトがマウスに対応すると、ユーザーはマウスを使ってオブジェクトとのインタラクションが可能になります。デフォルト値はtrueです。

このプロパティは、(SimpleButtonクラスを使わずに)Spriteクラスのインスタンスでボタンをつくるときに役立ちます。Spriteインスタンスを用いてボタンを作成すれば、ボタンに何かをつけ加えるとき、addChild()メソッドによりSpriteインスタンスを追加する方法が採れます[*1]。しかし、この処理はマウスイベントについて、予期しない動作を招くおそれがあります。親インスタンスがターゲットのオブジェクトとなることを期待しているとき、子として加えたSpriteインスタンスがマウスのターゲットオブジェクトになるかもしれないからです。親インスタンスが必ずマウスイベントのターゲットオブジェクトとして働くようにするには、親インスタンスのmouseChildrenプロパティをfalseに設定します。

このプロパティを設定しても、イベントは配信されません。インタラクティブな機能を実現するには、addEventListener()メソッドを使う必要があります。

[訳者注*1] SimpleButtonクラスは、DisplayObjectContainerクラスを継承しませんので、表示リストをもたず、したがってDisplayObjectContainer.addChild()メソッドで子のインスタンスを加えることもできません。

実装
   public function get mouseChildren():Boolean
   public function set mouseChildren(value:Boolean):void


以下の例では、containerという名前のSpriteオブジェクト(DisplayObjectContainer型のひとつ)を設定します。そして、そのmouseChildrenプロパティをfalseに設定すると、mouseClickイベントのターゲットがオブジェクトcontainerになり、その子オブジェクトではないことを示します。

import flash.display.Sprite;
import flash.events.MouseEvent;

var container:Sprite = new Sprite();
container.name = "container";
addChild(container);

var circle:Sprite = new Sprite();
circle.name = "circle";
circle.graphics.beginFill(0xFFCC00);
circle.graphics.drawCircle(40, 40, 40);

container.addChild(circle);

container.mouseChildren = false;

container.addEventListener(MouseEvent.CLICK, clicked);

function clicked(event:MouseEvent):void {
  trace(event.target.name);   // container
}

Player
ActionScript 3.0/Flash Player 9/AIR1.0以降。

出典
Adobe LiveDocs[ActionScript 3.0 Language and Components Reference] > [DisplayObjectContainer]「mouseChildren property

参考
Adobe LiveDocs[ActionScript 3.0コンポーネントリファレンスガイド] > [DisplayObjectContainer]「mouseChildrenプロパティ


作成者: 野中文雄
作成日: 2008年7月20日


Copyright © 2001-2008 Fumio Nonaka.  All rights reserved.