在动作脚本3中选择隐藏在另一个后面的资产/ ui元素

时间:2012-02-21 14:28:46

标签: actionscript-3 overlapping

我在舞台上有两个或更多图形元素(位图,控件)。所有人都在听老鼠事件。有时它们可​​以完全或部分地与其他元素重叠。 (想想乱七八糟的拼图)

当我点击某个元素时,如果该元素下面有某些内容,则该元素应该传递给该元素。如果鼠标点下方没有任何内容,则应触发移动事件。

例如:看下面的方框。假设用“=”符号绘制的框A是用“ - ”符号绘制的重叠框B.共谋区域用“#”符号绘制。

如果在“#”区域单击鼠标,则该事件应触发方框B的单击事件而不是方框“A”以及在A和B的非串通区域单击鼠标时的相应事件。

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

我希望能够绕过所有元素的鼠标事件,直到底部的元素到达。我希望我的问题有道理。

1 个答案:

答案 0 :(得分: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是所有这些对象的父对象。