0

removeChildByTag: child not found 这是我的代码,请帮忙!我是一个相当新的 cocos2d 开发人员,所以我无法弄清楚是什么导致 Xcode 给我这个错误。

//Life System
        CCSprite *Life3 = [CCSprite spriteWithFile:@"heart.png"];
        Life3.position = ccp(210,200);
        CCSprite *Life2 = [CCSprite spriteWithFile:@"heart.png"];
        Life2.position = ccp(220,200);
        CCSprite *Life1 = [CCSprite spriteWithFile:@"heart.png"];
        Life1.position = ccp(230,200);
        [self addChild:Life3];
        [self addChild:Life2];
        [self addChild:Life1];
        if(Life == 2) {
            [self removeChildByTag:Life3];
        }
        else if(Life == 1) {
            [self removeChild:Life2];
            [self removeChild:Life3];
        }
        else if(Life <= 0) {
            [self removeChild:Life1];
            [self removeChild:Life2];
            [self removeChild:Life3];
            [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[MainMenu scene]]];
        }
4

3 回答 3

0

尝试将所有 [self removeChild:] 或 [self removeChildbyTag:] 替换为

[self removeChild:Life1 cleanup:YES]

如果这也不起作用,我建议您在需要时只需 [self addChild:]。不要在开始时将所有三个 Lifes 添加为子项。所以代码会变成:

CCSprite *Life3 = [CCSprite spriteWithFile:@"heart.png"];
    Life3.position = ccp(210,200);
    CCSprite *Life2 = [CCSprite spriteWithFile:@"heart.png"];
    Life2.position = ccp(220,200);
    CCSprite *Life1 = [CCSprite spriteWithFile:@"heart.png"];
    Life1.position = ccp(230,200);

    if(Life == 2) {
        [self addChild:Life2];
        [self addChild:Life1];
    }
    else if(Life == 1) {
        [self addChild:Life1];
    }
    else if(Life <= 0) {
       [self addChild:Life3];
       [self addChild:Life2];
       [self addChild:Life1];
        [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[MainMenu scene]]];
    }
于 2013-09-24T03:59:24.357 回答
0

In the conditional for Life == 2, it should be removeChild, not removeChildByTag

于 2013-09-14T14:54:07.207 回答
0

我已经发布了您的代码,其中包含按标签删除子项的正确方法。
removeChildByTag需要一个整数标签,而不是一个对象(在你的情况下,一个精灵)

    CCSprite *Life3 = [CCSprite spriteWithFile:@"heart.png"];
    Life3.tag = 3;
    Life3.position = ccp(210,200);

    CCSprite *Life2 = [CCSprite spriteWithFile:@"heart.png"];
    Life2.tag = 2;
    Life2.position = ccp(220,200);

    CCSprite *Life1 = [CCSprite spriteWithFile:@"heart.png"];
    Life1.tag = 1;
    Life1.position = ccp(230,200);

    [self addChild:Life3];
    [self addChild:Life2];
    [self addChild:Life1];

    if(Life == 2) {
        [self removeChildByTag:3];
    }
    else if(Life == 1) {
        [self removeChild:2];
        [self removeChild:1];
    }
    else if(Life <= 0) {
        [self removeChild:1];
        [self removeChild:2];
        [self removeChild:3];
        [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[MainMenu scene]]];
    }
于 2013-09-16T04:58:45.630 回答