修改引擎CCNode.js的代码,加粗内容为修改部分。
var _touchStartHandler = function (touch, event) {
//防止多点触摸,隐藏或者销毁不会触发touchEnd,因此多加两个判断
if(cc._currentTouchNode && cc._currentTouchNode.isValid && cc._currentTouchNode.activeInHierarchy){
return;
}
var pos = touch.getLocation();
var node = this.owner;
if (node._hitTest(pos, this)) {
if (CC_JSB) {
event = Event.EventTouch.pool.get(event);
}
event.type = EventType.TOUCH_START;
event.touch = touch;
event.bubbles = true;
node.dispatchEvent(event);
if (CC_JSB) {
event.touch = null;
event._touches = null;
Event.EventTouch.pool.put(event);
}
cc._currentTouchNode = node;
return true;
}
return false;
};
var _touchMoveHandler = function (touch, event) {
if (CC_JSB) {
event = Event.EventTouch.pool.get(event);
}
var node = this.owner;
event.type = EventType.TOUCH_MOVE;
event.touch = touch;
event.bubbles = true;
node.dispatchEvent(event);
if (CC_JSB) {
event.touch = null;
event._touches = null;
Event.EventTouch.pool.put(event);
}
};
var _touchEndHandler = function (touch, event) {
if (CC_JSB) {
event = Event.EventTouch.pool.get(event);
}
var pos = touch.getLocation();
var node = this.owner;
if (node._hitTest(pos, this)) {
event.type = EventType.TOUCH_END;
}
else {
event.type = EventType.TOUCH_CANCEL;
}
event.touch = touch;
event.bubbles = true;
node.dispatchEvent(event);
if (CC_JSB) {
event.touch = null;
event._touches = null;
Event.EventTouch.pool.put(event);
}
cc._currentTouchNode = null;
};
var _touchCancelHandler = function (touch, event) {
if (CC_JSB) {
event = Event.EventTouch.pool.get(event);
}
var pos = touch.getLocation();
var node = this.owner;
event.type = EventType.TOUCH_CANCEL;
event.touch = touch;
event.bubbles = true;
node.dispatchEvent(event);
if (CC_JSB) {
event.touch = null;
event._touches = null;
Event.EventTouch.pool.put(event);
}
cc._currentTouchNode = null;
};
