之前一直用2。x版本,觉得现在3.x版本应该稳定了,可以用了于是打算用一下看,结果发现Cocos2dx 3.x版本UI和Menu不能设置触摸优先级了,使用的是还是优先级的那套机制,但是却不能设置优先级了,官方是故意这么做的吗?为什么要这么做呢?还是觉得这个问题不重要忽略了?我在一个游戏里不全是场景切换,还要设置项什么的,不能设置触摸优先级虽然也能做到多个有按钮重叠的层按钮响应互不影响,但是毕竟没有直接设置触摸优先级来屏蔽底层按钮响应来的方便。不知道这算不算是3.x版本的一个倒退?
觉得有需要的顶一下好不,说不定官方看到人多了以后会再加上呢
现在按钮优先级好像直接是看图层的。显示出来哪个在前面就点到哪个。
如果想要点击事件是否传递到后面层,调用一个setxxxxxxxx(true/false)的函数就可以了。
这个回答我不太确定,请楼下指教
_touchListener = EventListenerTouchOneByOne::create();
_touchListener->setSwallowTouches(true);
_touchListener->onTouchBegan = CC_CALLBACK_2(Widget::onTouchBegan, this);
_touchListener->onTouchMoved = CC_CALLBACK_2(Widget::onTouchMoved, this);
_touchListener->onTouchEnded = CC_CALLBACK_2(Widget::onTouchEnded, this);
_touchListener->onTouchCancelled = CC_CALLBACK_2(Widget::onTouchCancelled, this);
_eventDispatcher->addEventListenerWithFixedPriority(_touchListener, -9999);
没注意到这个问题, 你是这样写的吗?
_eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);你说的看层的大概是看到这个方法,但实际上这个方法是给监听器设置了一个值为0的优先级,和层没有半毛钱关系。至于setxxxxxxxx(true/false)方法,应该是说是否吞没事件,跟优先级关系也不大。
我是说Menu和UI组件这套东西不能设置优先级,不是自己写一个layer来监听事件,事实上Menu和UI组件也不允许我们自己监听触摸事件
addEventListenerWithFixedPriority 和 addEventListenerWithSceneGraphPriority 差别大了,
如果Menu和UI组件也不允许我们自己监听触摸事件. 你又不想改源代码, 那就没有办法了.
哎,我是感觉他们现在在Layer的触摸事件这块的设计完全就是混乱的,具体看看layer,ui,menu这块相关的源码就知道了,完全可以用人多就是任性这句话来解释了
FixedPriority vs SceneGraphPriority
The EventDispatcher uses priorities to decide which listeners get delivered an event first.
FixedPriority is an integer value. Event listeners with lower Priority values get to process events before event listeners with higher Priority values.
SceneGraphPriority is a pointer to a Node. Event listeners whose Nodes have higher z-order values (that is, are drawn on top) receive events before event listeners whose Nodes have lower Z order values (that is, are drawn below). This ensures that touch events, for example, get delivered front-to-back, as you would expect.
以上是从英文Programmers Guide上copy过来的,可以看出来完全不需要再自己设置优先级了,直接设置Layer的zorde就行了。尼玛中文文档谁写的?
menu的优先级本来就是最高吧
非也,menu也只是个普通的layer而已
然而cocosJs并没有这两个方法,只有addEventListener(listener, this);这个方法,作用就像楼主说的一样
是0喔,cocosjs
那么,求教,这样要怎么设置Menu的优先级,要如何让Menu比它的parent(Layer)更先响应事件监听,比如,它的Parent优先级为-1,而Menu是为0的,那么Menu是无法点击的。这样要怎么解决?