我有一些事件监听器,而不是一旦不再需要它们就能够删除。 我遵循了其他几个人的建议,并在函数本身中包含了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,他们在其中使用变量。
我觉得这个设计很糟糕,但我不确定在哪里?
是否有一种“正确的”标准方法来删除事件监听器?
感谢。
答案 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函数中。