如何让上层节点的触摸事件不传递到底层节点

如何让上层节点的触摸事件不传递到底层节点底层按钮还可以点击,如何设置点击无效

上层节点的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();
        });
    },
1赞

@273736780 这个方法不错,哈哈哈

添加了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) 并不能阻止穿透

这个不是阻止穿透,是允许穿透哦~

兄弟好巧,我也是这么做的…

之后我们会提供一个禁止穿透的组件,用来方便大家在编辑器上设置。

4赞

在touch的回调里面调用stopPropagation就可以。但是测试发现需要在每个回调里面都要调用,down move end cancel这些回调的每一个里面都要调用

1.6 已经加入了一个新的组件 cc.BlockInputEvents ,能够自动阻止穿透

1赞

@jare 官方大大,能不能提供一个 类似于U3d中射线检测 某个坐标上的所有节点的API啊

这个试试用物理引擎应该可以

还以为要自己写一个组件呢,没想到已经有了:grin: