AS3 | removeListener的问题

时间:2014-03-30 03:43:54

标签: actionscript-3


这是我的代码:

function startDrawMarker():void {
    if (isStartDrawMarker!=false) {
        stage.addEventListener(MouseEvent.MOUSE_DOWN, onDownMarker);
    } else {
        stage.removeEventListener(MouseEvent.MOUSE_DOWN, onDownMarker);
    }
}

当' isStartDrawMarker' = true,as3添加事件监听器,但当' isStartDrawMarker' = false,as3不会删除Listener。

3 个答案:

答案 0 :(得分:0)

如果您只在MOUSE_DOWN为真时才听取isStartDrawMarker,那么它将是:

function startDrawMarker():void {
    if (isStartDrawMarker) {
        stage.addEventListener(MouseEvent.MOUSE_DOWN, onDownMarker);
    } else {
        stage.removeEventListener(MouseEvent.MOUSE_DOWN, onDownMarker);
    }
}

答案 1 :(得分:0)

当你打电话给" startDrawMarker"并且isStartDrawMarker为false,引用与调用它时不同,并且它是真的。如果没有使用提供的代码删除侦听器,并且其他一切都是正确的,那么您可能希望尝试使用弱侦听器。您还可以通过检查" isStartDrawmarker"来使您的代码更易于阅读。是真的,而不是"!= false"

function startDrawMarker():void {
    if (isStartDrawMarker) {
        stage.addEventListener(MouseEvent.MOUSE_DOWN, onDownMarker, false, 0, true);
    } else {
        stage.removeEventListener(MouseEvent.MOUSE_DOWN, onDownMarker);
    }
}

答案 2 :(得分:0)

好吧,更改isStartDrawMarker的值不会调用startDrawMarker方法,这就是为什么^^

使用AS3时,如果要在变量上添加行为,可以创建get / set。 为此,请重命名类变量

element

in

public var isStartDrawMarker 

并使用如下所示的get / set

private var _isStartDrawMarker

以下是如何在你的代码中使用它(注意你总是使用isStartDrawMarker而不是_isStartDrawMarker女巫是私有的)

/**
* get the current value
*/
public function get isStartDrawMarker():Boolean
{
return _isStartDrawMarker;
}

/**
* change the current value AND automatically add/remove a mousedown listener on the stage
*/
public function set isStartDrawMarker(value:Boolean):void
{
    _isStartDrawMarker = value;
    if (_isStartDrawMarker == true) {
        stage.addEventListener(MouseEvent.MOUSE_DOWN, onDownMarker);
    } else {
        stage.removeEventListener(MouseEvent.MOUSE_DOWN, onDownMarker);
    }
}

this.isStartDrawMarker = true; // will set to true AND add the listener
this.isStartDrawMarker = false; // will set to false AND remove the listener