如何让上层节点的触摸事件不传递到底层节点底层按钮还可以点击,如何设置点击无效
上层节点的touch回调里加上event.stopPropagation();
http://www.cocos.com/docs/creator/scripting/internal-events.html
问题自己已经解决,是否可以考虑给节点Node增加一个属性来设置触摸是否传递
同求。比如我现在就是给整个背景加一个Button组件来阻止消息穿透,感觉有点傻
我现在弹出的那个Node里面这样处理的
onEnable: function () {
this.node.on('touchstart', function (event) {
event.stopPropagation();
});
this.node.on('touchend', function (event) {
event.stopPropagation();
});
},
onDisable: function () {
this.node.off('touchstart', function (event) {
event.stopPropagation();
});
this.node.off('touchend', function (event) {
event.stopPropagation();
});
},
添加了5楼的代码,onEnable函数输出显示被调用过了,但是还是会穿透弹出层,点到弹出层下面的舞台上的聊天文本编辑框…
求问,这穿透有什么好处理的吗?
版本 1.3.3版本
不同节点树的节点不支持穿透,只有目标节点往父节点的冒泡过程可以允许或者阻止冒泡。
所谓的穿透,可能需要用 cc.eventManager.pauseTarget(node) 来暂时取消上层节点的事件监听。
我使用this.node.on(‘touchstart’, function (event) {也不能吞噬触摸事件,另外找到一个方法:
var listener = cc.EventListener.create({
event: cc.EventListener.TOUCH_ONE_BY_ONE,
onTouchBegan: function (touch, event) {
cc.log('Touch Began: ’ + event);
event.stopPropagation();
return false;
},
});
cc.eventManager.addListener(listener, this.node);
可行,你可以试试。
请问这两种方式实现机制有什么不同,为什么一种可以,另一种不行?
经验证cc.eventManager.pauseTarget(node) 并不能阻止穿透
这个不是阻止穿透,是允许穿透哦~
兄弟好巧,我也是这么做的…
之后我们会提供一个禁止穿透的组件,用来方便大家在编辑器上设置。
在touch的回调里面调用stopPropagation就可以。但是测试发现需要在每个回调里面都要调用,down move end cancel这些回调的每一个里面都要调用
1.6 已经加入了一个新的组件 cc.BlockInputEvents ,能够自动阻止穿透
这个试试用物理引擎应该可以
还以为要自己写一个组件呢,没想到已经有了
