2011年4月10日日曜日

AS3でクリックされた表示オブジェクトの特定(target取得)

マウスイベントからクリックされたターゲットを特定するのはターゲットにidの変数等を初期化時にセットしておき、イベントオブジェクトのターゲットのプロパティとしてidを取得する方法が有効。
しかし、表示オブジェクトが、複数のパーツをまとめるため等の理由で、深くネストされている場合、ネストの一番奥のオブジェクトがターゲットとして戻されるので、親やその親の表示オブジェクトを参照する必要がある。
そのため、オブジェクトの構造が複雑な場合、どの深さのオブジェクトがターゲットになるかで、何れだけ上の親を呼ぶか、ターゲットの位置で変わってしまう場合がある。
この問題はmouseChildrenプロパティーの設定である程度コントロール出来る。


mouseChildren プロパティ
mouseChildren:Boolean [読み書き可能]

オブジェクトの子に対してマウスが有効かどうかを調べます。オブジェクトが使用可能なマウスの場合、マウスを使用して対話できます。デフォルト値は true です。

このプロパティは、SimpleButton クラスではなく、Sprite クラスのインスタンスを使用してボタンを作成するときに役立ちます。Sprite インスタンスを使用してボタンを作成する場合、他のSprite インスタンスを追加するために addChild() メソッドを使用してボタンの修飾を選択できます。子として追加する Sprite インスタンスは、親インスタンスをターゲットオブジェクトとすることを想定するときに、マウスイベントのターゲットオブジェクトとなる場合があるため、マウスイベントについて予期しない動作を引き起こす可能性があります。親インスタンスが確実にマウスイベントのターゲットオブジェクトになるようにするには、親インスタンスのmouseChildren プロパティを false に設定します。

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

1 件のコメント:

shinjixxxxx さんのコメント...

設定例。
内側のオブジェクトのmouseChildrenプロパティをfalseにして、
受け取り側で一つ上の親(.parent)を参照するようにする。
(自分自身のmouseChildrenをfalseにすると、
 自コンテナがそれ以外の実態を持たない場合イベントそのものが拾えなくなるため。)

---------
イベントリスナを追加するコンテナ側の設定:
this.mouseEnabled = true;//自分はマウスイベントを返す
itemIn.mouseChildren = false;//itemInは自分の内側にネストされた表示オブジェクト。
                子はイベントをターゲットとして返さない

イベントを受け取る側の参照:
e:MouseEvent; //マウスイベントオブジェクト
var index:Number = e.target.parent.index; //イベントのターゲットの親が対象の表示オブジェクト

コメントを投稿