Я пытаюсь добавить 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 (child -> _ parent == 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, его указатель автоматически увеличивает счетчик на единицу, а Node этого не делает.