2

在我的简单项目中,我使用触摸事件来更改按钮状态:在这种情况下一切正常

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 函数中找到了“if”语句:

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

在我的情况下, "listener._claimedTouches" == 0 并且 if 语句拒绝调用 onTouchMove 和 onTouchEnded 侦听器。

有谁知道为什么“listener._claimedTouches”== 0 以及为什么会发生这样的事情?

4

1 回答 1

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);
于 2015-10-26T10:27:08.120 回答