MOUSE OUT 在 MovieClip 中被调用

Posted

技术标签:

【中文标题】MOUSE OUT 在 MovieClip 中被调用【英文标题】:MOUSE OUT is being called inside MovieClip 【发布时间】:2016-05-12 20:06:16 【问题描述】:

我在我的 MovieClip 中添加了一个 MOUSE_OVER 事件监听器,然后我像这样添加了 MOUSE_OUT:

mc.addEventListener(MouseEvent.MOUSE_OVER, boxItemMouseOver, false, 0, true);

protected function boxItemMouseOver(e:MouseEvent):void
    

        trace("mouse over");
        var boxItem:MovieClip = e.currentTarget as MovieClip;

        boxItem.addEventListener(MouseEvent.MOUSE_OUT, boxItemMouseOut, false, 0, true);
        boxItem.removeEventListener(MouseEvent.MOUSE_OVER, boxItemMouseOver);       
    


    protected function boxItemMouseOut(e:MouseEvent):void
    

        trace("mouse out");
        var boxItem:MovieClip = e.currentTarget as MovieClip;

        boxItem.addEventListener(MouseEvent.MOUSE_OVER, boxItemMouseOver, false, 0, true);
        boxItem.removeEventListener(MouseEvent.MOUSE_OUT, boxItemMouseOut);         
    

但是每当我在我的电影剪辑中移动鼠标时,都会调用 MOUSE_OUT 事件函数,尽管我仍然没有离开电影剪辑所占据的区域。

我设法找出我的问题在哪里,但仍然无法解决,我正在向我的 SWF 添加一个光标来替换鼠标的图标(我隐藏了鼠标),一旦我添加了问题发生,这里是一个简单的例子。

代码:Simple Source Code, Couple of classes

【问题讨论】:

您的假光标可能正在接收鼠标事件。将 mouseEnabled 设置为 false 【参考方案1】:

1.. 你在两个函数中都有'trace("mouse over")' 2.. 首先移除鼠标悬停监听器,然后添加鼠标移出监听器 3.. 我不明白,当你可以写 e.target.removeEventListener(..) 时,为什么你需要声明新变量 'boxItem' 4..你在说什么是不可能的,我在几行中捕获了几个不必要的代码,所以你很有可能在你的代码中做错了,向我们展示你的更大的代码..

附言另外,尝试将 mouseEnabled 设置为 false 以及将 mouseChildren 设置为 false,但我怀疑它会起作用

【讨论】:

感谢您的反馈,我编辑了 mu 问题,我还上传了一个简单的示例并设法找到我的问题的根源仍然无法解决它:)。 @ZouhairElamraniAbouElassad ,只看一个类,“项目”,我发现了你的错误和解决方案:) 正如我上面提到的,你在说什么是不可能的,mouseChildren = false;工作得很好,但你以错误的方式使用它,不要将它与 boxItem 变量一起使用,但使用源变量,我看到你有 'Zad_Block_04' 和 'Zad_Gate_02' 变量,我假设它们是源,所以,分配 mouseChildren =错误的;给他们,而不是 boxItem 正如我上面提到的,不需要'boxItem'变量,只需编写:e.target.removeEventListener(MouseEvent.MOUSE_OVER, boxItemMouseOver); e.target.addEventListener(MouseEvent.MOUSE_OUT, boxItemMouseOut, false, 0, true); e.target.setChildIndex(e.target.getChildByName("active"), (boxItem.numChildren-1)); 这是一个很好的做法,先检查孩子,然后再检索它,对不起我的英语,但我想你猜我写的是什么,我的意思是:if(e.target.getChildByName("active ") != null) e.target.setChildIndex(e.target.getChildByName("active"), (boxItem.numChildren-1)); 我刚刚在上面看到@Amy Blankenship 让你犯了一个错误:D“在 boxItem 上将 mouseChildren 设置为 false。”这是一个很大的错误,这永远不会起作用,总是将这种属性分配给源变量【参考方案2】:

boxItem 上将mouseChildren 设置为false。

【讨论】:

我做了,还是不行,这是Flash中的常见问题吗? 如果您想要翻转的整个区域中存在不透明像素,则不会。要弄清楚发生了什么,您可以做的一件事是在顶层侦听 MOUSE_OVER 并追踪这些事件的目标是什么(当您想要的对象获得 MOUSE_OUT 时,其他一些对象正在获得 MOUSE_OVER)。 艾米布兰肯希普正中目标。每当当前目标从 mc 更改为其他对象时,MOUSE_OUT 都会触发,如果允许 mc 内部的对象捕获鼠标事件,就会发生这种情况。如前所述,将 mouseChildren 设置为 false 可以解决问题。 我的 MovieClip 确实包含多个孩子,但我不确定它是否包含透明像素,有没有办法找出来? 感谢您的反馈,我编辑了我的问题,我还上传了一个简单的示例并设法找到了我的问题的根源,但仍然无法修复它:)。【参考方案3】:

改为收听ROLL_OUTMOUSE_OUT 在光标离开任何嵌套的孩子MovieClip 时被调度。

【讨论】:

但我想在完成后更改我的 MovieClip 的状态。 好的,所以使用ROLL_OVERROLL_OUT 这个答案不可能解决问题。投了反对票。

以上是关于MOUSE OUT 在 MovieClip 中被调用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用movieclip作为AS3中另一个可拖动对象的边界?

ActionScript 3 actionscript 3 - 按钮动作[听多个事件。例如。 MOUSE_OVER,MOUSE_OUT,MOUSE_UP]

org.openqa.selenium.interactions.MoveTargetOutOfBoundsException: (x, y) is out of bounds while Mouse

检查电影剪辑的一部分何时离开舞台

as3.0 判断圆圈正转还是倒转

线性调制和非线性调制