2012-02-21 8 views
0

ステージ上に2つ以上のグラフィック要素(ビットマップ、コントロール)があります。彼らはすべてマウスイベントを聞いています。いくつかの時間は、他の要素によって完全にまたは部分的にオーバーラップすることができます。アクションスクリプト3で別のものの後ろに隠されたアセット/ UI要素を選択する

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

例:下記のボックスをご覧ください。 「=」記号で描かれたボックスAは、「 - 」記号で描かれたボックスBと重なっている。結託領域は "#"記号で描かれています。

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

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

下の要素に達するまで、すべての要素のマウスイベントをバイパスできます。私の質問が意味をなさないことを願っている

答えて

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

関連する問題