所以我创建了一个暂停菜单,
- (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
...如果我从暂停菜单重新启动游戏场景,就不会发生这种情况,只有当我在游戏加载后从主菜单进入游戏时才会发生。
答案 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);