as3 mouseEnabled对我来说仍然是一个问题

时间:2010-02-11 22:47:50

标签: actionscript-3 mouseevent displayobject

现在几年,还有一些关于mouseEnabled的东西,我没有得到。我有一个Sprite(例如这里的“Sky”,它包含许多对象,其中一个是Cloud,我不想接收鼠标事件。我将这个Sky叠加在其他一些显示对象上。我希望云是可见,但不能阻止鼠标事件。如果你看到一棵树穿过云,你应该可以点击树。

在Sky课程中:

mouseEnabled = false;
cloud.mouseEnabled = false;
cloud.mouseChildren = false;

即使使用此配置,当云在树上时,我也无法点击树,因为云会阻止它。为什么???

2 个答案:

答案 0 :(得分:27)

即使Sky将mouseEnabled / mouseChildren设置为false ...它仍然是一个对象,它仍占用空间,因此仍然可以作为任何没有mouseEnabled / mouseChildren设置为false的PARENT容器的命中区域。

因此,我怀疑您的Sky对象与Tree对象不在同一个父容器中。您的Sky对象可能有自己的父容器对象,这是拦截事件的罪魁祸首。

详细说明:任何包含ANYTHING的对象都会有一个命中区域并拦截鼠标点击,即使它包含的所有内容(形状,子对象等)都可能将mouseEnabled / mouseChildren设置为false。

因此,即使你的Sky对象将mouseEnabled设置为false,你的Sky(及其子节点)仍会占用空间,因此仍然会为Sky的父容器提供拦截鼠标事件的命中区域。

因此,您的解决方案是确保Sky的所有父容器都将mouseEnabled属性设置为false,至少达到(但不包括)Tree和Sky对象的第一个共同祖先容器。

此外,通过设置mouseEnabled = false并保留mouseChildren = true,您可以拥有一个容器,其中只选择mouseEnabled = true的子项接收点击事件:)

答案 1 :(得分:4)

你说那里有“很多物品”吗?很可能其他东西阻止了它。我建议在舞台上添加一个监听器,然后你可以看到哪个对象正在接收点击次数:

import flash.utils.getQualifiedClassName;
stage.addEventListener(MouseEvent.CLICK, onClick);
private function onClick(event:MouseEvent):void
{
    trace(event.target.name, getQualifiedClassName(event.target));
}

发布更多代码,我们可以提供更多帮助。