2015-09-14 6 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); 

Через некоторое время отладки я нашел "если" заявление в функции 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.nameFunction в слушателе. Я не думаю, что это решение, потому что должно быть в сфере охвата, но на всякий случай. Иногда области в js вводят в заблуждение. –

ответ

6

Вы должны добавить «return true;» в конце вашего onTouchBegan. onTouchEnd будет срабатывать, когда onTouchBegan вернет true.

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

Да, это правильный ответ +, упомянутый в документации. Хорошая работа, @swen! –

+0

@ РоманГуйван спасибо – swen

+0

@swen спасибо! –