我正在尝试遍历并删除我的图层(HUDLayer)的所有子级。我正在尝试通过以下方式完成此任务:
for(id *item in HUDLayer.children_)
{
[self removeChild:item cleanup:YES];
}
但我收到一个错误 -> 表达式没有有效的对象类型
有人可以阐明我的问题吗?
谢谢
我正在尝试遍历并删除我的图层(HUDLayer)的所有子级。我正在尝试通过以下方式完成此任务:
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];
}
}
无论如何,希望它可以帮助某人。
大声笑 - 现在编辑这个,因为我(估计)迭代并从中删除,甚至,父母可能会导致数组突变。所以,我正在修改上面的内容,首先将所有子元素放在一个数组中,然后我将遍历 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;
再次 - 希望它可以帮助某人。