cocos2d - 孩子已经添加了。它无法再添加

时间:2011-10-03 19:00:09

标签: iphone objective-c ios cocoa cocos2d-iphone

所以我创建了一个暂停菜单,

- (void) reset {

    CCSprite * backg = [CCSprite spriteWithFile:@"noise.png"];
    backg.position = ccp(480/2, 320/2); 
    [pauseMenu addChild:backg];


    CCLabelBMFont *restartLabel = [CCLabelBMFont labelWithString:@"Restart" fntFile:@"good_dog_plain_32.fnt"];
    restartLabel.color = ccc3(68,136,168);
    CCMenuItemLabel *restartItem = [CCMenuItemLabel itemWithLabel:restartLabel target:self selector:@selector(restartMenu)];
    restartItem.position = ccp(0, 40);

    CCLabelBMFont *mainMenuLabel = [CCLabelBMFont labelWithString:@"Main Menu" fntFile:@"good_dog_plain_32.fnt"];
    mainMenuLabel.color = ccc3(68,136,168);
    CCMenuItemLabel *mainMenuItem = [CCMenuItemLabel itemWithLabel:mainMenuLabel target:self selector:@selector(exitMenu)];
    mainMenuItem.position = ccp(0, -40);

    CCLabelBMFont *resumeLabel = [CCLabelBMFont labelWithString:@"Resume" fntFile:@"good_dog_plain_32.fnt"];
    resumeLabel.color = ccc3(68,136,168);
    CCMenuItemLabel *resumeItem = [CCMenuItemLabel itemWithLabel:resumeLabel target:self selector:@selector(resumeMenu)];


    CCMenu *menu = [CCMenu menuWithItems:resumeItem,restartItem,mainMenuItem, nil];
    menu.position = ccp(480/2,320/2);
    [pauseMenu addChild:menu z:1];


    [self.hero sleep];

    [self addChild:pauseMenu];

}

此菜单是在我的gamecene中创建的,因此每当用户按下暂停按钮时,现在我有另一个名为mainMenu的场景,您可以从暂停菜单转到mainMenu我使用此代码:

- (void) exitMenu {

    [[CCDirector sharedDirector] replaceScene:[mainMenu scene]];
}

所以一旦你按下这个按钮它就会工作并返回到主菜单,但是当我按下mainMenu的“播放”按钮并转到游戏并按下暂停按钮时我会收到此错误:child already added. It can't be added again ...如果我从暂停菜单重新启动游戏场景,就不会发生这种情况,只有当我在游戏加载后从主菜单进入游戏时才会发生。

2 个答案:

答案 0 :(得分:1)

因为每次按下暂停按钮时都会调用[self addChild:pauseMenu];。你可以试试这个:

int pauseMenuTag = 99;

if(![self getChildByTag:pauseMenuTag]) {
    [self addChild:pauseMenu z:0 tag:pauseMenuTag];
}

希望检查您是否已添加节点。或者,您可以确保按钮调用的所有方法都使用removeChild:cleanup:

删除暂停菜单

答案 1 :(得分:0)

在我的情况下,当我创建缺少json文件的场景时发生了这个错误:

var loginScene = ccs.load(res.MainScene_json); 

我删除了MainScene_json文件,这就是为什么它给了我这个错误。当我正确引用正确的文件 Login_json 时,错误就消失了。

var loginScene = ccs.load(res.Login_json);