Cocos2D removeChildByTag

时间:2011-02-24 09:37:37

标签: cocos2d-iphone

我正在制作我的第一个cocos2D游戏而且我在标签方面遇到了麻烦。我要向我的gamelayer添加许多精灵,所以每次增加标记值时我都使用[self addChild:sprite z:1 tag:aTag]; aTag +=1;。因为每个精灵都应该有一个唯一的标签值。有时我想清除游戏中的所有孩子,所以我使用这样的标签值删除那些精灵。

 for (int i=10; i<1000; i++) {
        CCNode *child = [self getChildByTag:i];

        if (child == nil)
            NSLog(@"removeChildByTag: child not found!");
        else{
            NSLog(@"child removed");
            [self removeChild:child cleanup:YES];
            child=nil;
        }
    }  

当我再次将这些精灵像[self addChild:sprite z:1 tag:aTag]添加到我的游戏层时,出现错误“EXE bad Access”。为什么它显示错误。

2 个答案:

答案 0 :(得分:3)

您可以使用
直接删除孩子 [self removeChildByTag:aTag cleanup:YES];

对于错误访问,检查精灵是否为空或图像是否为空

答案 1 :(得分:0)

用于定义SAFE_REMOVE,如下所示

#define SAFE_REMOVE(p)              if (p) [p removeFromParentAndCleanup:YES];


// Remove the the tag


CCNode* node = [self getChildByTag:YOURTAGNAMEHERE];
    if (node != nil)
    {
        SAFE_REMOVE(node);
    }