刚开始研究cocos2d-html5的时候,有很多地方需要遮罩效果,把下面的层的所有事件全部禁用。
可以在main.js里面加入:
//设置层的点击优先级
cc.setRegisterTargettedDelegate =
function(node, priority){
if ("opengl" in
sys.capabilities && "browser" !=
sys.platform){
cc.registerTargettedDelegate(priority, true,
node);
}else
{
cc.Director.getInstance().getTouchDispatcher().addTargetedDelegate(node,
priority, true);
}
};
//取消层的点击优先级
cc.setUnregisterTouchDelegate = function(node){
if ("opengl" in
sys.capabilities && "browser" !=
sys.platform){
cc.unregisterTouchDelegate(node);
}else
{
cc.Director.getInstance().getTouchDispatcher().removeDelegate(node);
}
};
由于要考虑到jsb打包的时候也会用到,所以要加一下判断,接下面就是在例子中运用,使用的是cocos2d-html5 2.1.5版本:
var Test =
cc.Layer.extend({
ctor:function(){
this._super();
cc.associateWithNative(this,
cc.Layer);
},
init:function(){
this._super();
var normal
= cc.Sprite.createWithSpriteFrameName(‘btn.png‘);
var select =
cc.Sprite.createWithSpriteFrameName(‘btn.png‘);
var itemSprite =
cc.MenuItemSprite.create(normal, select, this.close, this);
var menu =
cc.Menu.create(itemSprite);
this.addChild(menu);
menu.setTouchPriority(cc.MENU_HANDLER_PRIORITY
- 2); //设置menu的层次,才可以让本层的对象进行点击和拖动事件
cc.setRegisterTargettedDelegate(this, cc.MENU_HANDLER_PRIORITY - 1); //
加入这句就可以屏蔽这个层下面的层的事件
return
true;
},
close:function(){
this.removeFromParent(true);
cc.setUnregisterTouchDelegate(this);
//取消掉本层的禁用事件,必须加
},
//以下的3个函数是必须要用到的,不然会有错,必须加
onTouchBegan:function(touch, event){
return
true;
},
onTouchMoved:function(touch, event){
return
true;
},
onTouchEnded:function(touch, event){
return
true;
}
});
这样就可以直接使用了,不过注意在关闭层的时候取消掉层的禁用,否则下面的层点击就无效了。