环境 cocos2d-x 2.2.2 + js
例如一个这样的界面
左上角的设置使用 cc.MenuItemSprite, 弹出的遮罩层和上面的按钮需要优先获取touch事件, 并阻止向后继续传播.
这里需要两个点就可以做到.
var bgLayer = cc.LayerColor.extend({
ctor: function () {
this._super();
cc.associateWithNative(this, cc.LayerColor);
cc.registerTargetedDelegate(-129, true, this); //1.设置触摸的优先级
this.setTouchEnabled(true);
},
onTouchBegan: function (touches, event) {
cc.log("TouchBegan: ");
return true; //2. 在onTouchXXX 回调里返回true来吞噬掉touch事件
},
onTouchesBegan: function (touches, event) {
var loc = touches[0].getLocation();
cc.log("TouchesBegan: " + loc.x + " : " + loc.y);
return true;
}
});
1.设置触摸的优先级
在layer创建的时候使用 cc.registerTargetedDelegate(-129, true, this);
来设置优先级(第1个参数)
这里的数字越小, 优先级越高,
另外要注意的是 MenuItem 的优先级是-128
, 所以要遮挡上上面的设置按钮, 遮盖层的优先级必须小于它.
2.在onTouchXXX 回调里返回true来吞噬掉touch事件.
这里注意不是 onTouchesXXX, 看了下c++的说明, 因为多点的触摸使用的StandardDelegate并没有吃掉该事件的相关参数, 所以在onTouchesXXX 里 return true
是没有用的.
PS 之前一直用的onTouchesXXX 来处理触摸的, 没发现居然不一样, 这个问题折腾了2个多小时, api里没有, 网上查到的各种说明都是c++的. 坑啊…