如何向ListView添加多个相同的节点

问题描述 投票:0回答:2

我尝试将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,“孩子已经添加。它不能再添加”);

我需要做什么?

c++ cocos2d-x cocosbuilder
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());
}

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类型调用它,它的指针会自动将计数器增加1,而Node则不会。

© www.soinside.com 2019 - 2024. All rights reserved.