2014-03-30 13 views
0


問題,這是我的代碼:AS3 |用的removeListener

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

當 'isStartDrawMarker'= TRUE,AS3添加事件監聽器,但是當 'isStartDrawMarker'=假,AS3不刪除監聽器。

+1

我猜測我們將需要更多的信息來幫助你找出問題所在。 – Bob

+0

這個實現,你必須: - isStartDrawMarker 的變化值 - 調用startDrawMarker方法來刪除/如果你想做我在一個單一的舉動我已經加入下面 長的答案另一個解決方法是刪除添加監聽 onDownMarker MouseEvent.MOUSE_UP事件的監聽器^^ – YopSolo

回答

0

如果你想監聽MOUSE_DOWN只有當isStartDrawMarker是真的,這將是:

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

賠率是,當你調用「startDrawMarker」和isStartDrawMarker是假的,引用是不一樣的就像你說的那樣,這是真的。如果偵聽器未按照提供的代碼被刪除,並且其他所有內容都是正確的,那麼您可能想嘗試使用弱偵聽器。你也可以讓你的代碼更容易通過檢查看,如果「isStartDrawmarker」是真實的,而不是「!=假」

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

好,改變isStartDrawMarker的價值不會叫startDrawMarker方法,這就是爲什麼^^

使用AS3,您可以在想要在變量更改上添加行爲時創建get/set。 爲此重新命名類變量

public var isStartDrawMarker 

private 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而不是_isStartDrawMarker巫婆是私人的)

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