0

ステージ上に2つ以上のグラフィック要素(ビットマップ、コントロール)があります。それらのすべてがマウスイベントをリッスンしています。場合によっては、他の要素と完全にまたは部分的にオーバーラップすることがあります。(ジグソーパズルのスクランブルピースを考えてください)

要素をクリックすると、その時点で要素の下に何かがある場合、クリックイベントが要素に渡されます。マウスポイントの下に何もない場合は、moveイベントがトリガーされます。

例:下のボックスを見てください。「=」記号で描かれたボックスAが「-」記号で描かれたボックスBと重なっていると言います。共謀エリアは「#」記号で描かれています。

マウスが「#」領域をクリックした場合、イベントは、ボックス「A」の代わりにボックスBのクリックイベントをトリガーし、マウスがAとBの非共謀領域をクリックした場合はそれぞれのイベントをトリガーする必要があります。

========
=      =
=   ####----
=   ####   -
====####   -
    -      -
    -      -
    --------

下部の要素に到達するまで、すべての要素のマウスイベントをバイパスできるようにしたいと思います。私の質問が理にかなっていることを願っています。

4

1 に答える 1

1

DisplayObjectContainerメソッドがありgetObjectsUnderPointます。これは、イベントハンドラーDisplayObjectsで、クリックポイントの下のリストを取得し、このリストに実際にクリックされたオブジェクト以外のものが含まれているかどうかを確認できることを意味します。

function mouseClickHandler(e:MouseEvent):void
{
  var clickedObject:DisplayObject = e.currentTarget as DisplayObject;
  var list:Array = objectsContainer.getObjectsUnderPoint(new Point(objectsContainer.mouseX,objectsContainer.mouseY));
  for each (var object:DisplayObject in list) {

       if (clickedObject != object) {
         //call different eventHandler on the object
         return;
       }
    }
    //call moveEventHandler
}

objectsContainerこの場合、Stageオブジェクト(オブジェクトがステージに直接追加されている場合)またはDisplayObjectContainerそれらすべてのオブジェクトの親であるオブジェクトになります。

于 2012-02-21T15:12:16.210 に答える