hitTestPoint没有给出正确的结果

问题描述:

我有一个我添加了MouseEvent.MOUSE_OUT监听器的影片剪辑。 hitTestPoint没有给出正确的结果

movieclip.addEventListener(MouseEvent.MOUSE_OUT, removeMovieClip); 

现在逻辑是去除上MOUSE_OUT影片剪辑和其重新添加到阶段上的另一按钮的MouseOver。预期功能类似于显示一些信息的滑块

在这种情况下,MouseEvent.MOUSE_OUT触发不能如预期那样正常工作。当我将鼠标从快速移动的移动夹快速启动时,它会触发。如果我非常缓慢地退出它不会触发,因此动画片段仍在舞台上。

可能是什么问题?

更新:我忘了提,我使用hitTestPoint以测试鼠标是影片剪辑之外。在大多数情况下,如果我慢慢移动鼠标,hitTestPoint没有给出正确的结果(错误),它位于Movieclip之外,因此我无法移除该对象。

更新2:让我重新说明这个问题。我想我弄糟了这个解释。
鼠标事件正常工作。

movieclip.addEventListener(MouseEvent.MOUSE_OUT 

正确着火,我在事件处理方法。现在,当我试图确定是否出现此影片剪辑时出现问题。

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时,我发现它经常显示的坐标不是鼠标移出时的坐标(显示槽内的一个点)。当我慢慢迁出时,这种行为最常出现。

可能是什么原因?

+1

尝试使用ROLL_OUT,它对我来说似乎更加健壮。 – alxx 2010-09-27 16:22:16

尝试聆听MouseEvent.ROLL_OUT事件。

+0

不工作.... – 2010-09-27 17:03:01

+0

它必须工作。 :)检查问题是否在其他地方,也许你在同一个空间上有更多的图层? – vulkanino 2010-09-27 17:23:25

+0

已更新问题 – 2010-09-27 17:37:12

如果您的MovieClip的mouseChildren属性未设置为false,则在您希望取决于MovieClip的内容之前触发MOUSE_OUT事件似乎是合理的。

那么,如果您将MouseEvent.MOUSE_OUT代码替换为Event.ENTER_FRAME事件,则可以解决此问题。您需要使用它,因为鼠标移动有时也不会在Mouse-Event监听器中捕获,这是因为swf帧速率通常太快以至于无法跟踪鼠标移动,因此请使用Event.ENTER_FRAME。

我以前遇到过这样的问题。所以添加监听器到这样的舞台

addEventListener(Event。ENTER_FRAME,removeMovieClip)

现在去除容器中的对象或MovieClip之前,把检查也很喜欢

公共职能removeMovieClip(EVT:事件):无效

{

如果(ParentClip.contains (ChildClip))ParentClip.removeChild(ChildClip)..

}

+0

ROLL_OVER和MOUSE_OVER有一点区别。当电影剪辑或显示对象包含两个或更多个子控件时,将鼠标移动到子控件中时,每次鼠标移动时都会触发MOUSE_OVER事件。而每次在将鼠标聚焦到其他位置后指向父容器或其任何子节点时,将调用ROLL_OVER一次。在鼠标的MainContainer或任何显示对象中移动鼠标不会触发ROLL_OVER事件。 – 2010-09-29 13:27:58

检查你的鼠标位置是阶段坐标(不是您的小孩动画片段坐标)。

换句话说确保您使用stage.mouseX, stage.mouseY,而不是隐含使用影片剪辑内的本地成员变量(这将给相对于影片剪辑鼠标的位置。)

hitTestPoint 需要点给予作为舞台坐标。

+0

谢谢,它帮助了我 – 2012-01-21 12:52:52