分享一个防止多点触摸的方法

修改引擎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;

};

3赞

哥们,能修改下排版么,顺便写一下引擎源码在哪里修改,修改后怎么重新编译之类的:smile:

这样做了 设置触摸穿透就无效了