2012-11-26 43 views
0

我想遍历并删除我的图层(HUDLayer)的所有子节点。我试图完成这个任务:在cocos2d中迭代一层儿童

for(id *item in HUDLayer.children_) 
    { 
     [self removeChild:item cleanup:YES]; 
    } 

但我得到一个错误 - >表达没有一个有效的对象类型

有人可以阐明我的问题有些轻?

谢谢

回答

2
for(id *item 

哎呦。 id本身就是一个对象(也是一个指针),不需要星号。

for(id item in HUDLayer._children) 

应该没问题。

+0

我知道它必须是那样简单的东西。然而,现在它说的对象'HUDLayer'没有财产children_ – Joey

+0

@Joey不是我的错 - 参考“HUDLayer”的文档。 – 2012-11-26 20:37:13

+0

children_是CCNode的一个属性,并未在HUDLayer中声明。有没有理由不承认CCNode的这个属性? – Joey

0

刚刚降落在此之后做了一些谷歌搜索的另一个问题。

您试图从父母(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; 

再次 - 希望它有助于某人。