1

私はゲームセンターのゲームをテストしています。具体的には、プレーヤーが一時的に脱落したときに何が起こるか (電話、バックグラウンドなど)、ゲームを一時停止し、プレーヤーが再び生き返ったときに再接続できるようにしたいと考えています。

match:shouldReinvitePlayer 機能によってプレイヤーが再招待されるため、これは 2 プレイヤー ゲームでは正常に機能しますが、これは 2 プレイヤー ゲームでのみ機能するように Apple によって指定されています。

3 人 (またはそれ以上) のプレイヤーのゲームでは、appDelegate applicationWillEnterForeground で次のように処理しています。

GKMatchRequest *comebackRequest = [[GKMatchRequest alloc] init];
    comebackRequest.playersToInvite = [NSArray arrayWithObjects:[[[[KYTGame instance] players] objectAtIndex:1] peerId], [[[[KYTGame instance] players] objectAtIndex:2] peerId], nil];
    comebackRequest.minPlayers = 3;
    comebackRequest.maxPlayers = 3;
    comebackRequest.playerGroup = [[[KYTGame instance] gameCategory] playerGroup];

    [[GKMatchmaker sharedMatchmaker] addPlayersToMatch:[[KYTGame instance] match] 
                                          matchRequest:comebackRequest 
                                     completionHandler:^(NSError *error) {
        NSLog(@"%sPlayers are %@", __PRETTY_FUNCTION__, [[KYTGame instance] match ].playerIDs);
    }]; 

何が起こるかというと、既存の 2 人のプレーヤーが喜んで 'ping' を実行し、アプリ デリゲート コードが呼び出されたとき (再び生き返ったプレーヤーで)、一致は nil ではなく、playedIDs 配列には何もありませんが、完了ハンドラーは表示されません。呼び出されると、「生き返った」プレーヤーは再び再接続されません。

また、「ライブ」プレーヤーのデバッグ ログに独特のパターンが表示され、バックグラウンドに移行したプレーヤーのステータスが「接続済み」なしで複数回「切断済み」に変更されたことを示しています。

それで...バックグラウンドにプッシュされてから復活したときにGKMATCHが意味をなすと期待しても大丈夫ですか。どうすれば再接続できますか? 出来ますか?

4

1 に答える 1

2

これを Apple サポートに提出しましたが、残念ながらその機能は利用できません。ゲーム キットはピア ツー ピア ネットワークで最大 4 人のプレーヤーをサポートしますが、ゲームに 3 人以上のプレーヤーがいる場合、いずれかが切断された場合に API は再接続する方法を提供しません。

于 2012-09-07T13:09:36.513 に答える