cocos2d-html5遮罩效果

  刚开始研究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;
  }
});

这样就可以直接使用了,不过注意在关闭层的时候取消掉层的禁用,否则下面的层点击就无效了。

 

posted on 2014-01-15 15:42  攻城师broon  阅读(359)  评论(0编辑  收藏  举报

导航