我尝试将Node添加到ListView中,这样:
auto nodeToAdd = loadCcbAsNode("fileccb.ccbi").get();
for (size_t i = 1; i < 10; i++)
{
listView->addChild(nodeToAdd); // it's cocos2d::ui::ListView
// which i load to scene
}
但得到这样的错误:
CCASSERT(孩子 - > _父== nullptr,“孩子已经添加。它不能再添加”);
我需要做什么?
这些节点是否只是克隆?如果是,您可以在每次迭代时添加相同的副本:
auto nodeToAdd = loadCcbAsNode("fileccb.ccbi").get();
listView->addChild(nodeToAdd);
for(size_t i = 1; i < 9; i++) {
listView->addChild(nodeToAdd->clone());
}
或者,如果是一次性操作,请在运行时加载一些实例:
for(size_t i = 1; i < 10; i++) {
listView->addChild(loadCcbAsNode("fileccb.ccbi").get());
}
for (int i = 1; i < 100; i++)
{
NodePtr nodeToAdd = loadCcbAsNode("fileccb.ccbi");
nodeToAdd->setPosition(0,i*45); // 45-size of height my node
// need to bias
listView->addChild(nodeToAdd.get());
}
事实证明,当我创建auto nodeToAdd = loadCcbAsNode("fileccb.ccbi").get();
时,nodeToAdd有一个类型Node,但是cocos有特殊的智能指针NodePtr,我用NodePtr类型调用它,它的指针会自动将计数器增加1,而Node则不会。