cocos2d - ребенок уже добавлен.Это не может быть добавлено снова - PullRequest
0 голосов
/ 03 октября 2011

поэтому я создал меню паузы,

- (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]];
}

поэтому, когда вы нажимаете эту кнопку, она работает и возвращается в главное меню, но затем, когда я нажимаю кнопку «play» из mainMenu и захожу в игру, нажимаю кнопку паузы, я получаю эту ошибку: child already added. It can't be added again ... этого не происходит, если я перезагружаю игровую сцену из меню паузы, происходит только тогда, когда я захожу в игру из главного меню после загрузки игры.

Ответы [ 2 ]

1 голос
/ 03 октября 2011

Это потому, что он вызывает [self addChild:pauseMenu]; каждый раз, когда вы нажимаете кнопку паузы. Вы можете попробовать это вместо:

int pauseMenuTag = 99;

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

Который, будем надеяться, проверит, если вы уже добавили узел. В качестве альтернативы, вы можете убедиться, что все методы, вызываемые кнопками, удаляют меню паузы с помощью removeChild:cleanup:

0 голосов
/ 27 января 2016

В моем случае эта ошибка произошла при создании сцены с отсутствующим файлом json:

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

Я удалил файл MainScene_json, поэтому он выдавал мне эту ошибку. Когда я правильно сослался на нужный файл Login_json , ошибка исчезла.

var loginScene = ccs.load(res.Login_json); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...