Как добавить несколько одинаковых узлов в ListView

Я пытаюсь добавить 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, «дочерний элемент уже добавлен. Его нельзя добавить снова»);

Что мне нужно сделать?

0

Решение

Эти узлы просто клонируются? Если да, вы можете добавить идентичную копию на каждой итерации:

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());
}
0

Другие решения

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 этого не делает.

0