7

ゲーム センターと GKTurnbasedMatch を使用する 2 プレーヤーの iOS ターン制ゲームがあります。

試合終了後にプログラムで対戦相手と再戦する方法はありますか?

プレイヤー同士で新しい対戦を開始するためのワンボタン アクセスを提供したいと考えています。

ボタン 1 つで解決できる方法がない場合、考えられる代替手段は何ですか?

4

2 に答える 2

4

実際、Game Center は完全なプログラマティック ソリューションを無視しているようです。間違いなく痛みです。@selector(doRematchTap)... または同等のもので次のことを試してください。

    NSMutableArray *playerIds = [NSMutableArray array];
    GKTurnBasedParticipant *otherPlayer = /* Get the other player some way */;
    GKTurnBasedParticipant *myParticipant = /* Get yourself a very similar way*/;

    [playerIds addObject:myParticipant.playerID];
    if (otherPlayer.playerID) {
        [playerIds addObject:otherPlayer.playerID];
    }// sanity check

    GKMatchRequest *request = [[GKMatchRequest alloc] init];
    request.playersToInvite = playerIds;
    request.minPlayers = 2;
    request.maxPlayers = 2;

    GKTurnBasedMatchmakerViewController *tbmcv = [[GKTurnBasedMatchmakerViewController alloc] initWithMatchRequest:request];
    tbmcv.showExistingMatches = NO;
    tbmcv.turnBasedMatchmakerDelegate = /* Your normal delegate for the callbacks */;

    [self presentViewController:tbmcv
                       animated:YES
                     completion:^{
                      }];

showExistingMatches = NO に注意することが重要です。これにより、正しいユーザーが事前に選択された状態でビュー コントローラーがマッチメイキング モードにジャンプし (そう思われます)、ユーザーの既存の一致は表示されません。

于 2012-09-07T03:04:37.380 に答える
1

私は完全な解決策を持っていませんが、あなたのためのアイデア:

すべてのプレーヤーには一意のプレーヤー ID があり、後で保管すると取得できます。

didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID

これで、プログラムによって新しい対戦を開始し、このプレーヤーを招待できます。再戦を希望するかどうか尋ねられたら、もう一度プレイできます。

これがコードや具体的なアドバイスではないことはわかっていますが、GameKit Class Referenceで残りを見つけるには十分な情報かもしれません。

解決できるかどうかわかりませんが、解決できたかどうか教えてください。頑張ってください!

編集:

参考文献を検索したところ、次のことがわかりました。

- (void) loadPlayerData: (NSArray *) identifiers

私自身は試していませんが、プレーヤーの識別子を配列に格納してこの関数に渡すと、この方法でプレーヤーを取得できるはずです。

iOS6 for Game Center にいくつかの変更が加えられ、プログラムで独自の方法でマッチを作成できるようになることを願っています...

于 2012-09-06T12:45:02.327 に答える