我想遍历并删除我的图层(HUDLayer)的所有子节点。我试图完成这个任务:在cocos2d中迭代一层儿童
for(id *item in HUDLayer.children_)
{
[self removeChild:item cleanup:YES];
}
但我得到一个错误 - >表达没有一个有效的对象类型
有人可以阐明我的问题有些轻?
谢谢
我想遍历并删除我的图层(HUDLayer)的所有子节点。我试图完成这个任务:在cocos2d中迭代一层儿童
for(id *item in HUDLayer.children_)
{
[self removeChild:item cleanup:YES];
}
但我得到一个错误 - >表达没有一个有效的对象类型
有人可以阐明我的问题有些轻?
谢谢
for(id *item
哎呦。 id
本身就是一个对象(也是一个指针),不需要星号。
for(id item in HUDLayer._children)
应该没问题。
刚刚降落在此之后做了一些谷歌搜索的另一个问题。
您试图从父母(HUDLayer)中删除对象。其他人用“自我”回答了这个问题。然而...
你说......
for(id *item in HUDLayer.children_) {
[self removeChild:item cleanup:YES];
}
...但我以为我会添加下面的代码,我想这可能帮助别人试图删除的子节点没有得到循环突变。
for(id item in HUDLayer.children) {
// If it's a sprite that you want to remove
if ([item isKindOfClass:[CCSprite class]]) {
// Use this to remove or else you'll have a loop mutation.
[item removeFromParentAndCleanup:YES];
}
}
无论如何,希望它有助于某人。
Lol - 现在编辑它,当我(认为)迭代并从EVEN中移除时,父项可能会导致数组变异。所以,我正在修改上面的内容,首先将所有子元素放入数组中,然后通过IN REVERSE迭代并在此基础上移除对象。这样就避免了数组变异。见下:
NSArray *items = [[NSArray alloc] initWithArray: HUDLayer.children];
for (long i = items.count - 1; i >= 0; i--) {
id item = items[i];
if ([item isKindOfClass:[CCSprite class]] ||
[item removeFromParentAndCleanup:YES];
}
}
items = nil;
再次 - 希望它有助于某人。
我知道它必须是那样简单的东西。然而,现在它说的对象'HUDLayer'没有财产children_ – Joey
@Joey不是我的错 - 参考“HUDLayer”的文档。 – 2012-11-26 20:37:13
children_是CCNode的一个属性,并未在HUDLayer中声明。有没有理由不承认CCNode的这个属性? – Joey