1

1 人が勝ったときにボードをリセットするボード ゲームを作成しています。それが役立つ場合、私はiPhone用のcocos2dを使用しています。すべての変数とピースの配列をリセットするリセット メソッドがあります。一度リセットされ、次に誰かが勝った後、ボードはリセットされません。これを修正する方法についてのアイデアはありますか? .m ファイルのメソッドは次のとおりです。//方法

-(void) resetGame {
self.isTouchEnabled = YES;

if( (self=[super init]) ) {


    self.isTouchEnabled = YES;

    turn = 2;

    pieces = [[NSMutableArray alloc] initWithObjects:
              [[Piece alloc] pieceWithType:1 player:1 row:1 col:3],    // bSphere1
              [[Piece alloc] pieceWithType:1 player:1 row:2 col:3],    // bSphere2
              [[Piece alloc] pieceWithType:2 player:1 row:1 col:2],    // bSquare1
              [[Piece alloc] pieceWithType:2 player:1 row:3 col:3],    // bSquare2
              [[Piece alloc] pieceWithType:2 player:1 row:0 col:3],    // bSquare3
              [[Piece alloc] pieceWithType:1 player:2 row:0 col:4],    // wSphere1
              [[Piece alloc] pieceWithType:1 player:2 row:2 col:4],    // wSphere2
              [[Piece alloc] pieceWithType:2 player:2 row:1 col:4],    // wSquare1
              [[Piece alloc] pieceWithType:2 player:2 row:3 col:4],    // wSquare2
              [[Piece alloc] pieceWithType:2 player:2 row:2 col:5],    // wSquare3
              nil];

    // add background before pieces
    CCSprite *bg = [CCSprite spriteWithFile:@"grid.png"];
    [bg setPosition:ccp(240, 160)];
    [self addChild:bg z:0];

    // add all the pieces
    for(Piece *piece in pieces) {
        [self addChild:piece];
    }

}

}
4

1 に答える 1

0

そのレイヤー/CCSceneを1ラウンド以上使用する場合(メニューなどの別の中間CCSceneに置き換えられない場合)、init関数の外部でスプライトを追加/削除してみてください。

あなたは次のようなことをすることができます

- (void)resetLevel: {

//remove old children
[this removeAllChildrenWithCleanup:YES];

//Add new children
pieces = [[NSMutableArray alloc] initWithObjects:
     [[Piece alloc] pieceWithType:1 player:1 row:1 col:3],    // bSphere1
     .......
     nil];

    // add background before pieces
    CCSprite *bg = [CCSprite spriteWithFile:@"grid.png"];
    [bg setPosition:ccp(240, 160)];
[self addChild:bg z:0];

    // add all the pieces
    for(Piece *piece in pieces) {
       [self addChild:piece];
    }

}

コードはテストされていません。いくつかの変更が必要になる場合があります

また、NsMutableArrayおよびPieceインスタンスの割り当て(alloc)を保持しないようにする必要があります。これは、それらを解放するために余分な作業を行う必要があるためです。あなたのレイヤーはとにかくそれらを追加することによってそれらを保持します

于 2012-08-13T21:19:48.993 に答える