注:资源里一定不能有名字相同的资源
.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;
}