cocos2d - 已经添加了孩子。无法再次添加
Posted
技术标签:
【中文标题】cocos2d - 已经添加了孩子。无法再次添加【英文标题】:cocos2d - child already added. It can't be added again 【发布时间】:2011-10-03 19:00:08 【问题描述】:所以我创建了一个暂停菜单,
- (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];
这个菜单是在我的游戏场景中创建的,所以每当用户按下暂停按钮时,它就会出现,现在我有另一个场景叫做mainMenu
,你可以从暂停菜单转到mainMenu
,我使用了这个代码:
- (void) exitMenu
[[CCDirector sharedDirector] replaceScene:[mainMenu scene]];
因此,一旦您按下此按钮,它就会起作用并返回主菜单,但是当我按下 mainMenu
中的“播放”按钮并进入游戏并按下暂停按钮时,我收到此错误:@ 987654326@ ...如果我从暂停菜单重新启动游戏场景,则不会发生这种情况,只有在加载游戏后从主菜单进入游戏时才会发生这种情况。
【问题讨论】:
【参考方案1】:因为每次你点击暂停按钮时它都会调用[self addChild:pauseMenu];
。你可以试试这个:
int pauseMenuTag = 99;
if(![self getChildByTag:pauseMenuTag])
[self addChild:pauseMenu z:0 tag:pauseMenuTag];
这有望检查您是否已经添加了节点。或者,您可以确保按钮调用的所有方法都使用 removeChild:cleanup:
删除暂停菜单
【讨论】:
我会支持这条评论,因为我一直在寻找这样做,它非常有帮助,但问题是在exitMenu
函数中我没有删除 pauseMenu 子项,所以当游戏再次运行时,孩子已经在那里了。你的解决方案会解决它,所以只会删除孩子。【参考方案2】:
在我的情况下,当我创建缺少 json 文件的场景时发生此错误:
var loginScene = ccs.load(res.MainScene_json);
我删除了 MainScene_json 文件,这就是它给我这个错误的原因。当我正确引用正确的文件 Login_json 时,错误就消失了。
var loginScene = ccs.load(res.Login_json);
【讨论】:
以上是关于cocos2d - 已经添加了孩子。无法再次添加的主要内容,如果未能解决你的问题,请参考以下文章