2011-10-03 23 views
0

添加,所以我創建了一個暫停菜單,cocos2d - 孩子已添加。它不能再次

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

} 

這個菜單是我gamescene創建的,因此只要用戶按下暫停鍵這表明了,現在我已經另一個場景稱爲mainMenu您可以從暫停菜單去mainMenu和我用這個代碼:

- (void) exitMenu { 

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

所以一旦你按下這個按鈕,它的工作原理,並返回到主菜單,但後來當我按下從「播放」按鈕mainMenu並轉到遊戲並按下暫停按鈕我收到此錯誤:child already added. It can't be added again ...如果我從暫停菜單重新開始遊戲場景,這種情況不會發生,只有在遊戲加載後從主菜單轉到遊戲時纔會發生。

回答

1

這是因爲每次按暫停按鈕時都會調用[self addChild:pauseMenu];。你可以試試這個:

int pauseMenuTag = 99; 

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

這將有望檢查您是否已經添加節點。另外,您也可以確保所有的按鈕調用與removeChild:cleanup:

+1

我會給予好評此評論,因爲我要做到這一點,這是非常有幫助的,但問題是,在'exitMenu'功能我沒有刪除pauseMenu孩子,所以當遊戲再次,在跑孩子已經在那裏了。你的解決方案會解決它,所以只是刪除孩子。 – ahoura

+0

我很高興它讓你朝着正確的方向前進 –

0

在我來說,當我缺少JSON文件創建場景這個錯誤發生刪除暫停菜單的方法:

​​

我刪除MainScene_json文件這就是爲什麼它給了我這個錯誤。當我正確地引用了正確的文件Login_json,錯誤消失了。

var loginScene = ccs.load(res.Login_json); 
相關問題