这是我的代码:
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。
答案 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