弱菜分享一点小心得,大神勿喷,加载csb文件后如何按名字获取控件

看到网上一些教程给出的解决方案是每次获取控件都要遍历加载到的对象树,觉得不是个好办法,偶然想到可以利用callback参数在加载的同时解决问题,特来分享。
代码如下:

Map widgetlist;
content = CSLoader::createNode("CSBs/friendlistcell.csb", &widgetlist](Ref *p) {
     Node *now = dynamic_cast(p);
     widgetlist.insert(now->getName(), now);
});
if (!content) return false;
addChild(content);
        
headimg = dynamic_cast(widgetlist.at("icon"));


```

大概思路就是建立一个哈希表,在加载对象树的时候让cocos2d-x每读取成功一个节点就在哈希表里按名称保存对一个节点的引用。
然后需要哪个控件就直接从哈希表中获取就行了。
复杂度O(n)的遍历对象树的操作只需要在加载时执行一次就行了,从哈希表获取元素的复杂度是O(1),要快得多。

好啊,写得好啊

:7: 多谢支持