为什么removeEventListener对象的新实例不起作用?

时间:2012-05-11 11:08:13

标签: actionscript-3

我正在尝试在同一个类中创建一个类的新实例,并在创建实例后尝试删除MouseDown侦听器。

package com.objects{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    public class StickDragDrop extends NumButton {
        public var duplicateObject:MovieClip;
        public function StickDragDrop() {
            init();
        }
        public function init() {
            addEventListener(MouseEvent.MOUSE_DOWN,stick);
        }
        public function stick(e:MouseEvent) {
            duplicateObject=new e.currentTarget.constructor
            addChild(duplicateObject);
            duplicateObject.startDrag();
            duplicateObject.removeEventListener(MouseEvent.MOUSE_DOWN,stick);
            duplicateObject.addEventListener(MouseEvent.MOUSE_DOWN,unStick);
        }
        public function unStick(e:MouseEvent) {
            stopDrag();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您正在尝试删除duplicateObject的{​​{1}}事件侦听器,该事件侦听器将调用this.stick,而不是duplicateObject.stick并且该事件侦听器不存在。

尝试添加:

public function removeStick() {
    removeEventListener(MouseEvent.MOUSE_DOWN,stick)
}

到你的班级,而不是打电话

duplicateObject.removeEventListener(MouseEvent.MOUSE_DOWN,stick);

呼叫

duplicateObject.removeStick();

或者,您可能只需将呼叫更改为

duplicateObject.removeEventListener(MouseEvent.MOUSE_DOWN,duplicateObject.stick);

但我更喜欢第一种选择。