2015-09-14 24 views
2

在我簡單的項目,我用觸摸事件來更改按鈕狀態:在這種情況下,一切 工作正常的Cocos2D HTML5 onTouchEnded不工作

cc.eventManager.addListener(
{ 
    event: cc.EventListener.TOUCH_ALL_AT_ONCE, 
    swallowTouches: false, 
    onTouchesBegan: onTouchesBegan, 
    onTouchesEnded: onTouchesEnded 
}, this); 

但在這種情況下,我onTouchEnded功能從來沒有被稱爲:

cc.eventManager.addListener(
{ 
    event: cc.EventListener.TOUCH_ONE_BY_ONE, 
    swallowTouches: false, 
    onTouchBegan: onTouchBegan, 
    onTouchEnded: onTouchEnded 
}, this); 

過了一段時間進行調試,我發現 「if」 語句中cc.eventManager._onTouchEventCallback功能:

} else if (listener._claimedTouches.length > 0 
    && ((removedIdx = listener._claimedTouches.indexOf(selTouch)) != -1)) 
{ 

在我的情況「listener._claimedTouches」== 0和if語句拒絕調用onTouchMove和onTouchEnded偵聽器。

有沒有人有一個想法,爲什麼「listener._claimedTouches」== 0,爲什麼會發生這樣的事情?

+0

我在這段代碼中看不到任何問題。你能上傳整個代碼,看看有什麼不對嗎?另外,我通常在偵聽器中將this引用爲this.nameFunction。我不認爲這是解決方案,因爲應該在範圍內,但以防萬一。有時候js中的範圍是誤導性的。 –

回答

6

您應該添加一個「返回true;」在您的onTouchBegan結尾的聲明。當onTouchBegan返回true時,onTouchEnd會被觸發。

var listener = cc.EventListener.create({ 
    event:cc.EventListener.TOUCH_ONE_BY_ONE, 
    swallowTouches:false, 
    onTouchBegan: function(touch, event) { 
     return true; 
    }, 
    onTouchEnded: function(touch, event) { 
     //do sth. 
    } 
}); 
cc.eventManager.addListener(listener, this); 
+0

是的,這是在文檔中提到的正確答案+。好,@文! –

+0

@РоманГуйван謝謝 – swen

+0

@swen謝謝! –