Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 禁用子级上的鼠标检测,但仍保留在父级上_Actionscript 3_Air_Adobe Animate - Fatal编程技术网

Actionscript 3 禁用子级上的鼠标检测,但仍保留在父级上

Actionscript 3 禁用子级上的鼠标检测,但仍保留在父级上,actionscript-3,air,adobe-animate,Actionscript 3,Air,Adobe Animate,我动态添加了一个movieclip。在某个时刻,我绘制了电影剪辑,将位图放置在MC内部的MC中,并向其添加了一个添加过滤器。后来,我为这样的父movieclips提供了拖动功能。我想让鼠标检测除绘制的位图以外的所有内容。我已经将包含位图的movieclip设置为mouseEnabled false和mouseChildren false。但是位图仍然被鼠标检测到。当我将父对象设置为mouseEnabled=false时,父对象不再拖动,因此这不起作用。当我将父对象设置为mouseChildren

我动态添加了一个movieclip。在某个时刻,我绘制了电影剪辑,将位图放置在MC内部的MC中,并向其添加了一个添加过滤器。后来,我为这样的父movieclips提供了拖动功能。我想让鼠标检测除绘制的位图以外的所有内容。我已经将包含位图的movieclip设置为mouseEnabled false和mouseChildren false。但是位图仍然被鼠标检测到。当我将父对象设置为mouseEnabled=false时,父对象不再拖动,因此这不起作用。当我将父对象设置为mouseChildren=false时,没有任何变化,位图仍然被感知。如何使绘制的位图保持可见,而让拖动功能忽略MC包围的位图?

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

  • 由于显示列表的层次结构,直接使用鼠标不是正确的方法
  • 答案是使用一个方法,该方法返回一个给定的DisplayObjectContainer的数组,该数组直接位于给定点下。使用鼠标坐标作为点(请记住,您需要在阶段坐标空间中提供坐标,就像使用命中测试点一样)您可以在鼠标指针下获得显示对象列表,然后根据该信息处理鼠标事件
  • 在这个过程中,还存在计算收集对象的类的问题,解决方案非常简单

    // 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, "!!!");
            }
        }
    }
    

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

  • 由于显示列表的层次结构,直接使用鼠标不是正确的方法
  • 答案是使用一个方法,该方法返回一个给定的DisplayObjectContainer的数组,该数组直接位于给定点下。使用鼠标坐标作为点(请记住,您需要在阶段坐标空间中提供坐标,就像使用命中测试点一样)您可以在鼠标指针下获得显示对象列表,然后根据该信息处理鼠标事件
  • 在这个过程中,还存在计算收集对象的类的问题,解决方案非常简单

    // 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, "!!!");
            }
        }
    }
    

    只是个主意。将位图(或其mouseChildren=false的容器)的名称设置为特定的名称。比如“NoMouse”。然后在鼠标中,事件处理程序忽略事件if(e.target.name==“NoMouse”),其中e是处理程序参数。您是说希望子位图保持锁定在同一屏幕位置,即使其父位图被鼠标移动?@VC。重点之一是实体对象可以禁用鼠标交互,但是当鼠标与对象交互时,它的父对象仍然会发送鼠标事件。。@VC.One不,我希望整个包都可以拖动,包括位图。我只是不希望位图对鼠标敏感,因为90%的位图是一个巨大的透明框,远远超出了眼睛对可交互对象的感知。然后,你需要使用这种方法:请注意舞台坐标空间(就像hitTestPoint),而不是局部坐标。因此,您可以得到一个位于(mouseX,mouseY)位置下的子对象列表,如果列表中存在位图及其容器以外的对象,则允许该事件,诸如此类。这只是一个想法。将位图(或其mouseChildren=false的容器)的名称设置为特定的名称。比如“NoMouse”。然后在鼠标中,事件处理程序忽略事件if(e.target.name==“NoMouse”),其中e是处理程序参数。您是说希望子位图保持锁定在同一屏幕位置,即使其父位图被鼠标移动?@VC。重点之一是实体对象可以禁用鼠标交互,但是当鼠标与对象交互时,它的父对象仍然会发送鼠标事件。。@VC.One不,我希望整个包都可以拖动,包括位图。我只是不希望位图对鼠标敏感,因为90%的位图是一个巨大的透明框,远远超出了眼睛对可交互对象的感知。然后,你需要使用这种方法:请注意舞台坐标空间(就像hitTestPoint),而不是局部坐标。因此,您将获得一个位于(mouseX,mouseY)位置下的子对象列表,如果列表中存在位图及其容器以外的对象,则允许该事件,类似的内容。@VC.One bows humblyI我已完全完成此操作,谢谢!如果它对任何人都有帮助的话,我必须添加一个计数器,因为它还可以捕获背景作为一个形状,因此,只计算2+形状的点击次数。然后我不得不添加一个长的if语句来推断目标的路径,以便知道它来自哪个父级,知道开始拖动哪个父级(在这种情况下,MCs有很多嵌套,所以有很多可能的目标和路径)@ola.rogula很高兴它有帮助:)@VC.One-bows谦恭地说,我得到了充分的工作,谢谢!如果它对任何人都有帮助的话,我必须添加一个计数器,因为它还可以捕获背景作为一个形状,因此,只计算2+形状的点击次数。然后我不得不添加一个长if语句来推断目标的路径,以便知道它来自哪个父级,知道要开始拖动哪个父级(在这种情况下,MCs有很多嵌套,所以有很多可能的目标和路径)@ola.rogula很高兴它有帮助:)