Actionscript 3 AS3 |与removeListener的问题
Actionscript 3 AS3 |与removeListener的问题,actionscript-3,Actionscript 3,这是我的代码: function startDrawMarker():void { if (isStartDrawMarker!=false) { stage.addEventListener(MouseEvent.MOUSE_DOWN, onDownMarker); } else { stage.removeEventListener(MouseEvent.MOUSE_DOWN, onDownMarker); } } 当“isStart
这是我的代码:
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不会删除侦听器。如果只在
isStartDrawMarker
为true时才要侦听鼠标向下的,则它将是:
function startDrawMarker():void {
if (isStartDrawMarker) {
stage.addEventListener(MouseEvent.MOUSE_DOWN, onDownMarker);
} else {
stage.removeEventListener(MouseEvent.MOUSE_DOWN, onDownMarker);
}
}
很有可能,当你调用“startDrawMarker”和isStartDrawMarker为false时,引用与调用它时的引用不同,并且是true。如果没有按照提供的代码删除侦听器,并且其他所有内容都是正确的,那么您可能希望尝试使用弱侦听器。您还可以通过检查“isStartDrawmarker”是否为true而不是“!=false”,使代码更易于阅读
那么,更改isStartDrawMarker的值将不会调用startDrawMarker方法,这就是为什么^^
使用AS3,您可以在希望添加变量更改行为时创建get/set。
为此,请重命名类变量
public var isStartDrawMarker
在
并使用下面的get/set
/**
* 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);
}
}
下面是如何在代码中使用它(请注意,您始终使用isStartDrawMarker而不是\u isStartDrawMarker witch是私有的)
或
我猜我们需要更多信息来帮助您找出问题所在。使用此实现,您必须:-更改isStartDrawMarker的值-调用startDrawMarker方法来删除/添加侦听器如果您想在一次移动中删除/添加侦听器我在下面添加了一个很长的答案另一个解决方案是删除onDownMarkerMouseEvent.MOUSE\u UP事件上的侦听器^^
private var _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
myClass.isStartDrawMarker = true; // will set to true AND add the listener
myClass.isStartDrawMarker = false; // will set to false AND remove the listener