如何正确删除事件监听器?

时间:2014-12-31 10:36:19

标签: events actionscript listener

我有一些事件监听器,而不是一旦不再需要它们就能够删除。 我遵循了其他几个人的建议,并在函数本身中包含了RemoveEventListener,如:

        object1.addEventListener(MouseEvent.MOUSE_DOWN, function StartMove(event:MouseEvent):void
        {
            mousePoint = new Point(MC.mouseX, MC.mouseY);
            objectOffset = new Point(int(mousePoint.x - object1.x), int(mousePoint.y - object1.y));
            mousePoint.y -= objectOffset.y;
            mousePoint.x -= objectOffset.x;
            mousePressed = true;
            event.currentTarget.removeEventListener(event.type, StartMove);
        });

但这只是创建了监听器,然后在使用一次时将其删除。 事件侦听器函数在较大的函数(MouseMoves())中创建,因为它们使用MouseMoves()中的局部变量。 (不确定这是否是一种合适的方法。) 因此,如果我尝试从外部删除侦听器,他们无法看到要删除的函数名称,并且我无法在MouseMoves()之外声明函数cus,他们在其中使用变量。

我觉得这个设计很糟糕,但我不确定在哪里?

是否有一种“正确的”标准方法来删除事件监听器?

感谢。

2 个答案:

答案 0 :(得分:0)

当您准备好删除事件侦听器时,您可以使用与首先添加它的语法相同的语法。因此,当您准备好删除此侦听器时,代码中的某个位置可以使用此

object1.removeEventListener(MouseEvent.MOUSE_DOWN, function StartMove(event:MouseEvent):void

这样就可以了解要从哪个对象中删除侦听器。 您的鼠标功能如下所示:

object1.addEventListener(MouseEvent.MOUSE_DOWN, function StartMove(event:MouseEvent):void
        {
            mousePoint = new Point(MC.mouseX, MC.mouseY);
            objectOffset = new Point(int(mousePoint.x - object1.x), int(mousePoint.y - object1.y));
            mousePoint.y -= objectOffset.y;
            mousePoint.x -= objectOffset.x;
            mousePressed = true;
        });

答案 1 :(得分:0)

是的,您的编码:

event.currentTarget.removeEventListener(event.type, StartMove);
在StartMove函数中可以毫无问题地使用

。只是在监听器中取消注册事件,如果它在事件函数中,请不要担心。当然,您也可以使用:

object1.removeEventListener(MouseEvent.MOUSE_DOWN, StartMove);
如果您不想使用event.currentTarget.removeEventListener,也可以在StartMove函数中