Cocos2d html5 onTouchEnded 不工作
Cocos2d html5 onTouchEnded is not working
在我的简单项目中,我使用触摸事件来更改按钮状态:
在这种情况下一切正常
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 以及为什么会发生这样的事情?
您应该在 onTouchBegan 的末尾添加一个 "return true;" 语句。 onTouchEnd 将在 onTouchBegan returns 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);
在我的简单项目中,我使用触摸事件来更改按钮状态: 在这种情况下一切正常
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 以及为什么会发生这样的事情?
您应该在 onTouchBegan 的末尾添加一个 "return true;" 语句。 onTouchEnd 将在 onTouchBegan returns 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);