0

私は Objective-C と Cocos2d にまったく慣れていないので、次のコードで次のエラーが発生する理由がよくわかりません。助けていただけますか?

- (NSArray *) menuItemsArray
{   
    NSMutableArray *array = [NSMutableArray alloc];
    for (Player * player in playersArray) {
        NSLog(@"creating menu item with image %@",player.imageFilename);
        CCLayer *newPage = [[CCLayer alloc] init];
        CCMenuItemImage *titem = [CCMenuItemImage itemFromNormalImage:player.imageFilename
                                                    selectedImage:player.imageFilename
                                                           target:self selector:@selector(playerSelected:)];

        CCMenu *menu = [CCMenu menuWithItems: titem, nil];
        menu.position = ccp(self.contentSize.width/2, self.contentSize.height/2);

        NSLog(@"before adding item to layer");
        //[titem removeFromParentWithCleanup:YES];
        [newPage addChild:titem];
        //[newPage release];
        NSLog(@"after adding item to layer");
        [array addObject:newPage];

        /*
        [titem release];*/
        //[newPage release];
        //[menu release];
    }    
return array;
}

そして、私はエラーが発生します:

2012-06-15 17:13:11.003 Killer[3222:707] *** Assertion failure in -[CCLayer     addChild:z:tag:], /Users/max/Documents/workspace/Killer/Killer/libs/cocos2d/CCNode.m:388
2012-06-15 17:13:11.006 Killer[3222:707] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'child already added. It can't be added again'

この質問が非常に低レベルである場合は申し訳ありません...そして、私を助けていただければ感謝します! :)

4

1 に答える 1

1

エラーは、作成したmenuItemを2つの親に追加しようとしていることです。メニューにのみ追加してください。次に、メニューをレイヤーに追加します。ラインを交換してください

[newPage addChild:titem];

これで

[newPage addChild:menu];

そして、あなたはすべてのプレーヤーのためにページの配列を受け取ります。

于 2012-06-15T15:25:12.897 に答える