.h中:
#ifndef __SANGUO_UTILS_H__ #define __SANGUO_UTILS_H__ #include "cocos2d.h" USING_NS_CC; /** * 在节点树中按名字来寻找节点 * * @param root 根节点 * @param name 节点名称 * * @return 找到返回对应节点,找不到返回null */ cocos2d::Node* seekChildByName(cocos2d::Node* root,const std::string& name); template <class RET> RET seekChildByNameWithRetType(cocos2d::Node* root,const std::string& name) { auto ret = dynamic_cast<RET>(seekChildByName(root,name)); CCASSERT(ret,"Can't get Object with the name or the type"); return ret; } #endif
.cpp中
#include "utils.h" Node* seekChildByName(Node* root,const std::string& name) { if (!root) { return nullptr; } if (root->getName() == name) { return root; } const auto& arrayRootChildren = root->getChildren(); for (auto& subNode : arrayRootChildren) { auto child = dynamic_cast<Node*>(subNode); if (child) { auto res = seekChildByName(child,name); if (res != nullptr) { return res; } } } return nullptr; }