当 mouseEnabled 上有多个重叠项目时,MouseInput 被忽略 = false

Posted

技术标签:

【中文标题】当 mouseEnabled 上有多个重叠项目时,MouseInput 被忽略 = false【英文标题】:MouseInput ignored when having multiple overlapping items on mouseEnabled = false 【发布时间】:2014-08-06 18:00:47 【问题描述】:

当多个不是 mouseEnabled 的元素位于我尝试单击的元素之上时,我遇到了 mouseEvents 没有被触发的问题。

在我正在构建的游戏中,我有一个类似于棋盘游戏“风险”的棋盘。所以我有不规则形状的领土。

我的视觉场景如下:

世界地图 -玩家拥有的领土集 --领土 ---领土图 ---领土形状

所以每个地区都有两个孩子,图形是一个带有 PNG 图形的 MovieClip。此 MovieClip 设置为 mouseEnabled 和 mouseChildren = false。一定是因为位图是方形的,而不是不规则形状的。

以前我没有到位图,我可以通过单击不同的形状简单地选择每个区域,但现在我已将位图添加为额外的子项,每个区域都有一个明显的矩形边界框。在区域形状内单击时,会按预期选择区域。但是,当在形状外部但在边界框内单击时,根本没有任何反应,而不是单击 PNG 并进入另一个区域的基础形状,整个鼠标输入被忽略。

就好像 2 个不启用鼠标的重叠 PNG 对 Flash 来说太多了??

这是一个已知问题吗?难道我做错了什么?有解决办法吗?

代码示例

public function Territory( a_TerritoryXML:XML )

    var t_ClassReference:Class          = Main.Instance.LibTerritories.applicationDomain.getDefinition( a_TerritoryXML.tname ) as Class;
    m_TerritoryShape                    = new t_ClassReference();
    m_TerritoryShape.x                  = a_TerritoryXML.xPos;
    m_TerritoryShape.y                  = a_TerritoryXML.yPos;
    m_TerritoryShape.mouseEnabled       = true;
    m_TerritoryShape.mouseChildren      = true;
    mouseEnabled                        = false;
    mouseChildren                       = true;
    t_ClassReference                    = Main.Instance.LibTerritories.applicationDomain.getDefinition( a_TerritoryXML.tname + "Graphic" ) as Class;
    var t_TerritoryGraphic:MovieClip    = new t_ClassReference();
    t_TerritoryGraphic.x                = a_TerritoryXML.xPos;
    t_TerritoryGraphic.y                = a_TerritoryXML.yPos;
    t_TerritoryGraphic.mouseEnabled     = false;
    t_TerritoryGraphic.mouseChildren    = false;
    this.addChild( t_Graphic );
    this.addChildAt( m_TerritoryGraphic, 0 );

【问题讨论】:

分享您的实际源代码。它可以按照你想要的方式工作,所以这个问题很可能是你如何放置物品以及你在哪里连接鼠标监听器。 虽然我很好奇为什么图形会叠加在形状之上? - 根据形状,我假设它实际上不是 Shape 对象(无法接收点击事件)而是 Sprite 或 MovieClip? “领土形状”是一个包含手动绘制(在 Flash IDE 中)矢量形状的影片剪辑。 根据请求,我添加了代码示例。我希望这会有所帮助。 我在舞台上添加了一个 MouseEvent 监听器。 (我使用 event.target 来识别点击了哪个区域)我认为这比拥有 750 个鼠标事件侦听器更可取。形状在图形下方的原因是图形应该是可见的,而不是形状。如果我将形状设置为不可见,则无法再单击它。 【参考方案1】:

有时mouseEnabled=false; 还不够,请尝试同时添加mouseChildren=false;

【讨论】:

看起来解决方案是在这种思路中。我忘记将“Set of Territories”容器设置为 mouseEnabled = false。因此,这个正在注册点击!

以上是关于当 mouseEnabled 上有多个重叠项目时,MouseInput 被忽略 = false的主要内容,如果未能解决你的问题,请参考以下文章

面临禁用时日历图标在另一个日历弹出窗口上重叠的问题

当networkx中有数百个节点时如何避免重叠?

ActionScript 3 诱捕mouseEnabled

删除 3dsmax 中的重叠面

如何在不重叠的情况下显示多个小吃店

当我们在运行时更改模拟器方向时,UIViews 重叠