[已解决]jsb如何屏蔽指定层之下所有层的触摸事件?

新弹出一个层,屏蔽这个新弹出层以下所有层(包括子级层)所有的触摸事件?

cc.registerTargetedDelegate(cc.MENU_HANDLER_PRIORITY-1, true, 弹出层对象);
弹出层对象.onTouchBegan = function(){return true;};

试了这样,但是变成了所有的事件都不响应了,包括弹出层对象上面的层。

然后试着把弹出层上面的层也:cc.registerTargetedDelegate(cc.MENU_HANDLER_PRIORITY-10, false, 弹出层对象上面的层对象);
还是不行,就算这样设置优先级也没有用。

不行就出绝招

引擎这功能似乎不完美

弹出上层后,把下层所有的button setEnabled(false)

var MaskLayer = cc.LayerColor.extend({
_listener: null,
_fixedPriority: 0,
ctor: function () {
this._super();
this._fixedPriority = -129;
},

init: function () {
    var bRet = false;
    if (this._super()) {
        bRet = true;
    }
    return bRet;
},

onEnter: function () {
    this._super();
    this.setColor(cc.color.BLACK);
    this.setOpacity(160);
    var listener = cc.EventListener.create({
        event: cc.EventListener.TOUCH_ONE_BY_ONE,
        swallowTouches: true,
        onTouchBegan: function (touch, event) {
            return true;
        }
    });
    cc.eventManager.addListener(listener, this);
    this._listener = listener;
},

onExit: function () {
    cc.eventManager.removeListener(this._listener);
    this._super();
}

});

MaskLayer.create = function () {
var sg = new MaskLayer();
if (sg && sg.init()) {
return sg;
}
return null;
};

cc.eventManager.pauseTarget(this, true);
可以试试这个,下层的所有都暂停,
然后你关闭你的最上层的时候
cc.eventManager.resumeTarget(this._this,true);
当然,这是在不同的layer中,同一个layer的话,我觉得需要setTouchEnabled

试过了,你的方法可行,谢谢!:14: