2012-11-26 3 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'객체에 자식이 없습니다. – Joey

+0

@Joey 내 잘못이 아니며 'HUDLayer'문서를 참조하십시오. –

+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]; 
    } 
} 

어쨌든, 누군가를 돕기를 바랍니다.

지금 편집하십시오. 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; 

다시 도움이되기를 바랍니다.

관련 문제