关于cocos2dx触摸穿透的问题

两个界面叠加到一起,上层界面(A)盖住下层界面(B)。点击A界面的非按钮部分,如果点击区域恰好处于B界面中的某个按钮范围内,就会导致B界面的按钮被触发。
由于Menu具有较高的优先级,即使再A界面Layer中把触摸吞噬掉,还是没有用的。因为触摸响应的顺序应该是这样子的:
A界面上的按钮–>B界面上的按钮–>A界面最底层的Layer–>B界面最底层的Layer
大家对这种问题是如何解决的?还是说,根本不使用两个界面叠加的这种情况?

把A界面的触摸优先级调高

自定义按钮~

把A界面的触摸优先级调高

自定义按钮~

怎么调整界面优先级呢

楼主后来是怎么解决的呢?我也遇到这种问题

这个是层的优先级的问题,A和B的优先级谁高谁先接受到触摸事件,如果A的优先级高A会接受到消息,这个时候如果A吞噬消息,那么B就接受不到了,如果A没有吞噬消息,那这个触摸就会向下传递,所以就像楼上说的,你可以提高A的优先级,然后吞噬触摸,这样的画B就接受不到了。

ccmenu的级别是最高的,设置layer的触摸优先级是没有用的,楼上在扯淡,不要谢我,我是雷锋

如果Menu优先级最高我能想到的,只能是A的layer比B先注册了。如果不是普遍意义的问题,也可以B判断一下是否有A的Layer,再决定是否处理。

以前看3.0代码的时候,这块感觉就挺奇怪。鼠标事件(所有事件)好像不是走层级关系的。以事件名->优先级->注册顺序进行顺序调用。

每个回调判断一下是不是点中自己,不如点中就处理吃掉,否则继续遍历。:12:

quick框架可以这么写

也不知道是不是3.0的API

setTouchSwallowEnabled(false) – 当不吞噬事件时,触摸事件会从上层对象往下层对象传递,称为“穿透”

反正比较好用

 scene

Layer menu
Layer的吞噬触摸貌似不能影响menu的
楼主可以定义个标识变量 通过判断是否为当前Layer来开关menu
来避免别的层menu被点击

那请问一下你是怎么解决这个问题的啊

getEventDispatcher()->addEventListenerWithFixedPriority(listener, -128);
这样行吗?

— Begin quote from ____

引用第8楼guoranliaoran于2014-07-18 15:41发表的 :
ccmenu的级别是最高的,设置layer的触摸优先级是没有用的,楼上在扯淡,不要谢我,我是雷锋 http://www.cocoachina.com/bbs/job.php?action=topost&tid=156475&pid=1007295

— End quote

雷锋同志,没有最高,只有更高。

虽然别人是好心。但是确实是扯淡。

我遇到了,首先要在上面的红色层进行注册监听,如果想让触摸点击上层,影响下层,setSwallowTouches(false),并且,onTouchbegan()返回true,
如果不想影响下层,就setSwallowTouches(true),onTouchbegan()返回true
我这里只涉及红色层和绿色层,不涉及红色层和绿色层所在的父层,也有可能你是把,监听注册在父层了,

— Begin quote from ____

引用第7楼小塔于2014-07-18 10:46发表的 回 6楼(诶诶苏不渔) 的帖子 :
这个是层的优先级的问题,A和B的优先级谁高谁先接受到触摸事件,如果A的优先级高A会接受到消息,这个时候如果A吞噬消息,那么B就接受不到了,如果A没有吞噬消息,那这个触摸就会向下传递,所以就像楼上说的,你可以提高A的优先级,然后吞噬触摸,这样的画B就接受不到了。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=156475&pid=1006838

— End quote

此为正解