0

我在舞台上有两个或更多图形元素(位图、控件)。他们都在监听鼠标事件。有时它们可​​能完全或部分与其他元素重叠。(想想拼图拼图)

当我单击一个元素时,如果该元素下方有东西,则单击事件应该传递给该元素。如果鼠标点下方没有任何东西,则应该触发移动事件。

例如:看下面的方框。说用“=”号绘制的框A与用“-”号绘制的框B重叠。勾结区域用“#”号绘制。

如果鼠标单击“#”区域,则该事件应该触发框 B 的单击事件,而不是框“A”和如果鼠标单击 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 回答