<击> 我有一个影片剪辑,我在其上添加了一个MouseEvent.MOUSE_OUT监听器。 击>
<击>movieclip.addEventListener(MouseEvent.MOUSE_OUT, removeMovieClip);
现在的逻辑是删除MOUSE_OUT
上的影片剪辑并将其添加回另一个按钮的MouseOver
上的舞台。预期的功能就像一个显示一些信息的滑块
在这种情况下,MouseEvent.MOUSE_OUT
触发无法按预期运行。当我将鼠标移出moveclip 快速触发时。如果我非常缓慢地 ,则不会触发,因此动画片段仍然在舞台上。
可能是什么问题?
击>
更新:我忘了提到我使用 hitTestPoint 来测试鼠标是否在 MovieClip 之外。在大多数情况下,如果我慢慢移动鼠标,hitTestPoint
不会给出正确的结果(错误),因为它不在Movieclip之外,因此我无法删除该对象。
更新2:让我重新解释一下这个问题。我想我搞砸了这个解释 鼠标事件正常工作。
movieclip.addEventListener(MouseEvent.MOUSE_OUT
正确触发,我处于事件处理方法中。现在,当我试图确定我是否离开这个MovieClip时,问题出现了。
private function removeObj(eve:Event):void
{
var e:MouseEvent = MouseEvent(eve);
if (m_wishlistImage)
{
var InsideSlot:Boolean = eve.currentTarget.hitTestPoint(e.stageX, e.stageY);
if(!InsideSlot){
将鼠标慢慢移出对象InsideSlot
时仍然如此,因此代码流不会进入if
条件,因此我无法删除该对象。
在跟踪e.stageX
时,我发现它经常显示的坐标不是鼠标移出时的确切位置(显示插槽内的一个点)。当我慢慢搬出时,这种行为最常出现。
可能是什么原因?
答案 0 :(得分:4)
检查您的鼠标位置是否位于 stage 坐标(不是您的子动画片段坐标)。
换句话说,确保使用stage.mouseX, stage.mouseY
而不是隐式使用movieclip中的本地成员变量(这将提供相对于movieclip的鼠标位置。)
hitTestPoint 要求将该点作为舞台坐标给出。
答案 1 :(得分:1)
尝试收听MouseEvent.ROLL_OUT
事件。
答案 2 :(得分:1)
如果将MouseEvent.MOUSE_OUT的代码替换为Event.ENTER_FRAME事件,则可以解决此问题。您需要使用它,因为鼠标移动有时也不会捕获鼠标 - 事件侦听器,因为swf帧速率通常太快,无法跟踪鼠标移动,因此请使用Event.ENTER_FRAME。
我以前遇到过这样的问题。所以将监听器添加到这样的阶段
的addEventListener(Event.ENTER_FRAME,removeMovieClip)
现在,在从容器中删除对象或movieClip之前,还要检查
public function removeMovieClip(evt:Event):void
{
如果(ParentClip.contains(ChildClip))ParentClip.removeChild(ChildClip)..
}
答案 3 :(得分:0)
如果您的MovieClip的mouseChildren属性未设置为false,则在您希望依赖MovieClip的内容之前触发MOUSE_OUT事件是合理的。