2012-11-26 70 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; 

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