RichText中加入Button无法点击

通过RichElementCustomNode在RichText中添加一个Button,这个Button无法点击。调试了半天也没找到原因。

单步跟踪2dx的EventDispatcher的代码,终于找到原因了。EventDispatcher在发送点击事件前会对监听对象排序,其中优先级为0的为场景优先级,通过Z-Order来确定优先级。
通过void EventDispatcher::visitTarget(Node* node, bool isRootNode)函数来递归遍历整个场景。
获取子节点的代码是:auto& children = node->getChildren();
而在RichText中:
void RichText::initRenderer()
{
_elementRenderersContainer = Node::create();
_elementRenderersContainer->setAnchorPoint(Vec2(0.5f, 0.5f));
addProtectedChild(_elementRenderersContainer, 1, -1);
}
_elementRenderersContainer 是通过addProtectedChild 来添加的,不会被遍历到。所以加到这上面的按钮在排序的时候会被忽略,始终都在最低优先级。
场景中只要有UI的点击区域包含它的,都会把消息吃掉,无法传递到。

大概就是这样。PS:一直不明白这个 “保护” 的 子节点是用来干嘛的。

1赞

楼主有没有其他的方法来解决呢?

同问,这个问题如何解决。。。按钮和 菜单 不能在 richtext中使用

首先,2dx的menu做的非常烂,有条件的话建议自己做button
如果一定要用,不要再menu外设置坐标。最好都用MenuItemSprite
此外,menu设置globalzorder完全没有用