在 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 位图?

所以,经过一番讨论,我们得出以下结论:

  1. 由于显示列表层次结构的原因,直接用鼠标操作不是正确的方法。
  2. 答案在 DisplayObjectContainer.getObjectsUnderPoint(...) 方法中,returns 给定 DisplayObjectContainer 的子项的 A​​rray和直接在给定点下的孙子。使用 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, "!!!");
        }
    }
}