Cocos2d RemoveAllChildrenWithTag - PullRequest
       2

Cocos2d RemoveAllChildrenWithTag

2 голосов
/ 30 марта 2011

Я хотел бы иметь метод, подобный -(void)removeAllChildrenWithTag:(int)tag в подклассе CCNode.Как бы вы это сделали?

Я добавляю каждый раунд своей игры несколько спрайтов в этот узел, и после окончания раунда я хочу их удалить.Я подумал, что было бы неплохо дать всем им один и тот же тег, чтобы я мог просто удалить их по тегу.Но есть только метод для удаления ОДНОГО потомка с тегом.

Я знаю, что могу вызывать этот метод, пока не останется дочерний элемент, но я думаю, что он будет медленным.Есть ли лучшее решение, как пройти через целых детей и удалить каждого с упомянутым тегом?Я не знаю, как это сделать, потому что вы не можете удалить ни одного ребенка в for(* in *) петле.

Надеюсь, вы сможете мне помочь.:)

Ответы [ 2 ]

8 голосов
/ 30 марта 2011

Да .. Я думаю, что итерация массива children и удаление указанного тега children было бы самым простым. Вот часть кода.

CCNode *aChild;
while((aChild=[parentNode getChildByTag:aTag]) != nil)
    [parentNode removeChild:aChild cleanup:YES];
0 голосов
/ 30 марта 2011

[self removeChildByTag: 1 cleanup: YES];


Это удалит только одного дочернего элемента Вот полная реализация метода

-(void) removeChildByTag:(int)aTag cleanup:(BOOL)cleanup
{
    NSAssert( aTag != kCCNodeTagInvalid, @"Invalid tag");

    CCNode *child = [self getChildByTag:aTag]; //here it is simply getting a single chil

    if (child == nil)
        CCLOG(@"cocos2d: removeChildByTag: child not found!");
    else
        [self removeChild:child cleanup:cleanup];
}


-(CCNode*) getChildByTag:(int) aTag
{
    NSAssert( aTag != kCCNodeTagInvalid, @"Invalid tag");

    CCNode *node;
    CCARRAY_FOREACH(children_, node){
        if( node.tag == aTag )
            return node; //as it finds the first child with the specified tag it will return
    }
    // not found
    return nil;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...