我在舞台上有两个或更多图形元素(位图,控件)。所有人都在听老鼠事件。有时它们可以完全或部分地与其他元素重叠。 (想想乱七八糟的拼图)
当我点击某个元素时,如果该元素下面有某些内容,则该元素应该传递给该元素。如果鼠标点下方没有任何内容,则应触发移动事件。
例如:看下面的方框。假设用“=”符号绘制的框A是用“ - ”符号绘制的重叠框B.共谋区域用“#”符号绘制。
如果在“#”区域单击鼠标,则该事件应触发方框B的单击事件而不是方框“A”以及在A和B的非串通区域单击鼠标时的相应事件。
========
= =
= ####----
= #### -
====#### -
- -
- -
--------
我希望能够绕过所有元素的鼠标事件,直到底部的元素到达。我希望我的问题有道理。
答案 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
是所有这些对象的父对象。