Creator的on TOUCH事件怎么穿透节点?

如果两个节点有重叠的部分,且都用on(cc.Node.EventType.TOUCH_START,…)监听触摸事件,那么重叠的部分只有上面的节点会响应事件。如果想动态判断,让下面的节点响应事件,该怎么做呢?谢谢。

1赞

http://www.cocos.com/docs/creator/scripting/events.html

1赞

谢谢回答。可能我没有说清楚,事件可以冒泡到父节点我知道,但是非父节点和兄弟节点重叠的话只有层级在上面的节点收到事件。你拿两个图重叠一半,一个on TOUCH_START cc.log(1)一个cc.log(2),浏览器里点一点就知道了。

是这样的,最上层的节点响应了事件以后,事件只会在它的节点树中传递。要做到你想要的效果,这两个节点都不应该注册 on 事件,可以在它们上面放一个事件代理节点,判断应该触发哪个节点的回调,然后再动态调用

1赞

好的,谢谢。

ScrollView源码 line:871~898看了你就懂得怎么处理了

1赞

如果没有父子关系呢?

我发现cocos creator1.9的cc.Node.EventType.MOUSE_DOWN可以冒泡,而cc.Node.EventType.TOUCH_START就是不冒泡,我在Canvas这个根节点上能获得全屏的MOUSE_DOWN,却不能获得TOUCH_START,结果就是游戏只能在电脑上玩不能在手机上玩.TOUCH_START不冒泡的bug怎么解决.

theNode["_touchListener"].setSwallowTouches(false);

theNode是需要被穿透的节点

5赞

牛逼啊,这样的确好用, 2.4.3还可以用。

可惜单点触摸不支持

那不瞎了!~

对于这总特殊的,可以把要下层节点注册(其实就是持有这个节点对象)到上层节点,然后把对应事件直接转发到下层节点上去就行了

正解,2.4.6也可以的

请问一下,这个可以么,为什么我加了这句话还是不行呢?是两个node同级,上面那个node用on之后,再用theNode["_touchListener"].setSwallowTouches(false);这句话也没用啊?还是点击不了下面的

this.node._touchListener.setSwallowTouches(false)这个是用在上面的节点的

2.4.11好像不行了

先注册on 再设置
this.touchNode.on(cc.Node.EventType.TOUCH_CANCEL, this.sliderEnd, this);
this.touchNode["_touchListener"].setSwallowTouches(false);

是的,2…4.11 直接报错了