removeEventListener从一个函数,不工作,尝试了一切(我认为)

时间:2012-05-28 19:32:18

标签: actionscript-3 flash event-listener

我真的在这个小问题上尽了最大努力,经过了2个星期的漫长夜晚,我知道你们中有一位经验丰富的AS3开发人员会在一两分钟内解决这个问题,我希望。

所以我有一个非常简单的游戏,你可以通过MOUSEUP轻松播放动画,然后点击主题并制作另一个动画(splat或其他东西)。仅在影片剪辑内的一帧上使用hitTest。 (这很好)

我在删除所述eventListener时遇到问题,我尝试在动画结束时删除它,所以在动画的最后一个上会有AS从舞台上说removeEventListener,但这不起作用,所以我尝试了removeEventListener在动画中将动画添加到舞台后,仍然没有快乐。

我希望它很简单 - this.removeEventListener或currentTarget,但是没有。

我真的想不出别的什么,

对于AS的爱,请帮忙。 一个解释也很神奇我理解人们没有时间,所以任何输入都会受到高度赞赏。

以下是我的AS,如果有人想看到FLA,我可以发送它,我很乐意分享。

请注意,我可能非常明显我是新手所以请在途中帮助我......

import flash.display.MovieClip;

import flash.events.*;

var test:dart = new dart();
addChild(test);
circle.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag);

function fl_ClickToDrag(event:MouseEvent):void
{
    circle.startDrag();
}

stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);

function fl_ReleaseToDrop(event:MouseEvent):void
{
    circle.stopDrag();
    addEventListener(Event.ENTER_FRAME, checkIfHitTest);
    function checkIfHitTest(Event)
    {

        if (circle.hitTestObject(square))
        {
            trace("true, the circle and square are colliding");
            var s:blood_splat = new blood_splat();
            addChild(s);
            s.x = mouseX;
            s.y = mouseY;
            **removeEventListener(Event.ENTER_FRAME,checkIfHitTest);**

        }
        else
        {
            trace("false, the circle and square are not colliding");
            var s:blood_splat = new blood_splat();
            addChild(s);
            s.x = mouseX;
            s.y = mouseY;
            s.alpha = 0.1;
            **removeEventListener(Event.ENTER_FRAME,checkIfHitTest);**
        }
    }

}

2 个答案:

答案 0 :(得分:1)

只是这样做:

Event.currentTarget.removeEventListener(Event.type, checkIfHitTest)

答案 1 :(得分:1)

尝试在fl_ReleaseToDrop之外定义checkIfHitTest。从理论上讲,你所做的应该是有效的,因为你的removeEventListener代码也在fl_ReleaseToDrop的闭包中运行,但它的定义可能被忽略,因为你不应该在其他函数中定义命名函数。 / p>

另一个可能的问题是你给checkIfHitTest提供了与Class,Event相同的名称,因此你的定义有冲突 - 你的事件实例没有constance ENTER_FRAME。

老实说,即使你明显关闭了严格的模式,或者你会看到大量的编译错误,我无法想象你没有得到运行时错误。你有安装调试播放器吗?你真的应该重新打开严格的打字 - 它会给你反馈,至少可以自己解决很多这些问题。