在 child 上禁用鼠标检测但在 parent 上保持不变
Disabling mouse detection on child but remaining on parent
我动态添加了一个动画片段。在某些时候,我绘制了动画片段并将位图放置在 MC 内的 MC 中,并向其添加了一个添加过滤器。后来我给这样的 parent 动画片段添加了拖动功能。我希望鼠标检测除绘制的位图之外的所有内容。我已经将包含位图的动画片段设置为 mouseEnabled false & mouseChildren false。但是鼠标仍然检测到位图。当我将 parent 设置为 mouseEnabled = false 时,parent 不再拖动,所以这不起作用。当我将 parent 设置为 mouseChildren = false 时,没有任何变化,位图仍然被感知。如何让绘制的位图可见,但拖动功能忽略 MC-encased 位图?
所以,经过一番讨论,我们得出以下结论:
- 由于显示列表层次结构的原因,直接用鼠标操作不是正确的方法。
- 答案在 DisplayObjectContainer.getObjectsUnderPoint(...) 方法中,returns 给定 DisplayObjectContainer 的子项的 Array和直接在给定点下的孙子。使用 Mouse 坐标作为一个点(请记住,您需要在 Stage 坐标 space 中提供坐标,就像它是用 hitTestPoint) 你可以获得 Mouse 指针下的显示对象列表,然后根据该信息处理鼠标事件。
另外在计算收集到的对象类的过程中也遇到了问题,解决方法很简单。
// We are in the root here.
addEventListener(MouseEvent.MOUSE_DOWN, onDown);
function onDown(e:MouseEvent):void
{
var aPoint:Point = localToGlobal(new Point(mouseX, mouseY));
var aList:Array = getObjectsUnderPoint(aPoint);
// Lets browse through all the results.
for each (var aChild:DisplayObject in aList)
{
// How to find if an object is an instance of certain Class.
if (aChild is Shape)
{
trace("A Shape was found under a name of", aChild.name, "!!!");
}
}
}
我动态添加了一个动画片段。在某些时候,我绘制了动画片段并将位图放置在 MC 内的 MC 中,并向其添加了一个添加过滤器。后来我给这样的 parent 动画片段添加了拖动功能。我希望鼠标检测除绘制的位图之外的所有内容。我已经将包含位图的动画片段设置为 mouseEnabled false & mouseChildren false。但是鼠标仍然检测到位图。当我将 parent 设置为 mouseEnabled = false 时,parent 不再拖动,所以这不起作用。当我将 parent 设置为 mouseChildren = false 时,没有任何变化,位图仍然被感知。如何让绘制的位图可见,但拖动功能忽略 MC-encased 位图?
所以,经过一番讨论,我们得出以下结论:
- 由于显示列表层次结构的原因,直接用鼠标操作不是正确的方法。
- 答案在 DisplayObjectContainer.getObjectsUnderPoint(...) 方法中,returns 给定 DisplayObjectContainer 的子项的 Array和直接在给定点下的孙子。使用 Mouse 坐标作为一个点(请记住,您需要在 Stage 坐标 space 中提供坐标,就像它是用 hitTestPoint) 你可以获得 Mouse 指针下的显示对象列表,然后根据该信息处理鼠标事件。
另外在计算收集到的对象类的过程中也遇到了问题,解决方法很简单。
// We are in the root here.
addEventListener(MouseEvent.MOUSE_DOWN, onDown);
function onDown(e:MouseEvent):void
{
var aPoint:Point = localToGlobal(new Point(mouseX, mouseY));
var aList:Array = getObjectsUnderPoint(aPoint);
// Lets browse through all the results.
for each (var aChild:DisplayObject in aList)
{
// How to find if an object is an instance of certain Class.
if (aChild is Shape)
{
trace("A Shape was found under a name of", aChild.name, "!!!");
}
}
}