触摸事件和button冲突问题

creator使用了那么久还是感觉对于触摸事件的处理不太清楚。如果下面这样的结构:

这样只要子节点node注册了触摸事件就导致按钮无法接受触摸?(node是全屏的)这太不合理了吧?比如我要获得用户是否点击了屏幕,然后再处理其他事情,这样就无法实现了!如果采用私有api this.touchNode._touchListener.setSwallowTouches(false);(web设置无效果) 让node不吞噬触摸这样就导致root的触摸事件会被调用多次。 @panda @jare

你可以调整下结构

如果你是这个结构,那就不需要this.touchNode._touchListener.setSwallowTouches(false);

不添加的话,按钮无法触摸。node如果和root平级,会导致root无法接受触摸(没有父子关系)。

node如果和root平级,node就加上this.touchNode._touchListener.setSwallowTouches(false);

可以设置不吞掉点击事件,继续分发下去的

具体看下你的demo,可以上传一下吗?

这样的话,root节点的触摸事件就异常,一次触摸会接受两次事件触发。

不需要特别的demo啊,只要如图结构,root注册触摸事件,node也注册触摸事件,上面两个button就无法响应,如果node选择不吞噬触摸,那root的触摸事件就异常(每次触摸会触发两次事件)

由于没有父子关系,是没有办法继续分发下去的。node 触摸事件只能传递给root,而不能传递给button.

你这里应该设置node不吞噬事件,但是上面的两个button吞噬事件,这样就不会传到root

别纠结于这个结构,你要么把node提到和root同一级上,要么在root里再加个新节点,把root的触摸交给这个新节点
按你的那样,确实root会接受到两次事件,加多少node,root还接受多少次,不知道引擎这边是咋实现的,难道是每个node又新派发了一次事件?

node 提高到和root 一个等级root就无法接受触摸了,目前测试吞噬触摸的方案也行不通,在web上没有效果依然会阻挡按钮的触摸。死解了?:joy:

只有你自己死解了,我都试过无数遍了,很常见的需求,全屏加个点击事件播放音效