新弹出一个层,屏蔽这个新弹出层以下所有层(包括子级层)所有的触摸事件?
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
试过了,你的方法可行,谢谢!