2012-01-09 4 views
0

は、私はこのような場で私のCCMenuItemImageの画像を変更しようとしています:(Cocos2D)子は既にCCMenuItemImageを追加していますか?

- (void)playOrPauseMusic { 
    MPMusicPlayerController *musicPlayer = [MPMusicPlayerController applicationMusicPlayer]; 
    CCSprite *newSprite; 
    if (itemImage.tag == 50) { 
     [musicPlayer pause]; 
     newSprite = [CCSprite spriteWithFile:@"Image1.png"]; 
     playstopButton.tag = 51; 

    } else { 
     [musicPlayer play]; 
     newSprite = [CCSprite spriteWithFile:@"Image2.png"]; 
     itemImage.tag = 50; 
    } 
    CGPoint scale6 = CGPointMake(164/newSprite.contentSize.width, 
         48/newSprite.contentSize.height); 

    [newSprite setScaleX:scale6.x]; 
    [newSprite setScaleY:scale6.y]; 
    [itemImage setNormalImage:newSprite]; 
    newSprite.color = ccc3(128, 128, 128); 
    [itemImage setDisabledImage:newSprite]; 
} 

問題があり、このメソッドは、このクラッシュ呼び出されるたびに発生:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'child already added. It can't be added again' 

は私が何か間違ったことをしていますここに?

ありがとうございます!

答えて

2

正常に設定した後、newSpriteオブジェクトには親(imageItemオブジェクト)があります。 Spriteオブジェクトが既にどこかのCCNode階層にあるため(つまり、nil!= newSprite.parent)、Same newSpriteオブジェクトでDisableDisabledImageを設定すると、cocoはおそらく泣きそうです。

newSpriteEnabledオブジェクトとnewSpriteDisabledオブジェクトを作成し、newSpriteDisabledに色を設定してそこから取得することができます。

関連する問題