hitTestPoint没有给出正确的结果

时间:2010-09-27 16:11:00

标签: flex flash actionscript-3 actionscript

<击> 我有一个影片剪辑,我在其上添加了一个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时,我发现它经常显示的坐标不是鼠标移出时的确切位置(显示插槽内的一个点)。当我慢慢搬出时,这种行为最常出现。

可能是什么原因?

4 个答案:

答案 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事件是合理的。