Actionscript 3 禁用子级上的鼠标检测,但仍保留在父级上
我动态添加了一个movieclip。在某个时刻,我绘制了电影剪辑,将位图放置在MC内部的MC中,并向其添加了一个添加过滤器。后来,我为这样的父movieclips提供了拖动功能。我想让鼠标检测除绘制的位图以外的所有内容。我已经将包含位图的movieclip设置为mouseEnabled false和mouseChildren false。但是位图仍然被鼠标检测到。当我将父对象设置为mouseEnabled=false时,父对象不再拖动,因此这不起作用。当我将父对象设置为mouseChildren=false时,没有任何变化,位图仍然被感知。如何使绘制的位图保持可见,而让拖动功能忽略MC包围的位图?因此,经过一番讨论,我们得出以下结论:Actionscript 3 禁用子级上的鼠标检测,但仍保留在父级上,actionscript-3,air,adobe-animate,Actionscript 3,Air,Adobe Animate,我动态添加了一个movieclip。在某个时刻,我绘制了电影剪辑,将位图放置在MC内部的MC中,并向其添加了一个添加过滤器。后来,我为这样的父movieclips提供了拖动功能。我想让鼠标检测除绘制的位图以外的所有内容。我已经将包含位图的movieclip设置为mouseEnabled false和mouseChildren false。但是位图仍然被鼠标检测到。当我将父对象设置为mouseEnabled=false时,父对象不再拖动,因此这不起作用。当我将父对象设置为mouseChildren
// 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, "!!!");
}
}
}
因此,经过一番讨论,我们得出以下结论:
// 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很高兴它有帮助:)