0

我尝试将节点添加到 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, "子已经添加,不能再添加");

我需要做什么?

4

2 回答 2

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());
}
于 2018-03-01T15:10:39.953 回答
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 类型调用 value,它的指针自动将计数器加一,而 Node 没有。

于 2018-03-01T15:39:32.877 回答