SceneReader - 通过别名获取子节点

在游戏中加载cocostudio编辑好的场景json文件后,可以通过tag来获取子节点,再通过getComponent来获取该子节点的模块。

假设有一个场景MainMenuScene.json,其中包含一个子节点Node,tag是10013,这个子节点有一个GUI组件,程序中可以这样获取:

Node *scene = SceneReader::getInstance()->createNodeWithSceneFile("MainMenuScene.json");
ComRender *render = static_cast<ComRender*>(scene->getChildByTag(10013)->getComponent("GUIComponent"));
Widget* widget = static_cast<cocos2d::ui::Widget*>(render->getNode());

这样做没问题,但是毕竟通过tag来做,可读性有点不好,在ccs的场景编辑其中,对于添加的node有一个“别名”的属性,假设将上面的节点的别名改为: “MainMenuNode”,想请问下是否可以在游戏中,通过这个别名,来获取对应的Node对象,像是:

Node *scene = SceneReader::getInstance()->createNodeWithSceneFile("MainMenuScene.json");
Node *mainMenuNode = scene->getChildByName("MainMenuNode");
ComRender *render = static_cast<ComRender*>(mainMenuNode->getComponent("GUIComponent"));
Widget* widget = static_cast<cocos2d::ui::Widget*>(render->getNode());

这样代码可读性更强一点。

希望高手指点,谢谢 :slight_smile:

你好,这个目前已经确认了这个问题,该问题是name属性未正确反序列化导致,我们会尽快更正,并提交到主分支。

版主,我今天就掉这个坑里了,目前只能getChildByTag(),不能getChildByName(),求快解决 :6:

3.2里面是可以的!不能递归找, 必须通过父找他的子节点,就可以找到

我之前试了不行,回头我再试试。我那个UI超级简单,就一个父亲panel和一个儿子panel,上次确实没找到。