iOS6 以降で実行している場合にのみ表示される、GKMatchmakerViewController の直接のドロップイン置換としてカスタム マッチメーカーを実装しました。完全に機能していますが、GKMatchmakerViewController の UI の一部がわかりません。
2 プレイヤー (request.minPlayers = 2、request.maxPlayers = 2) の自動対戦を開始する場合、GKMatchmakerViewController は、接続状態に変わる前に見つかったプレイヤーの表示名と写真で UI を更新できます。 .
次のコードを使用して、自動一致を開始します。接続が確立され、ゲームが開始され、すべて問題ありません。
[[GKMatchmaker sharedMatchmaker] findMatchForRequest:matchRequest withCompletionHandler:^(GKMatch *match, NSError *error) {
if (error != nil) {
// ...the error handling code...
} else if (match != nil) {
NSLog(@"An auto-match has been found: %@", match);
if (match.expectedPlayerCount == 0) {
[[GKMatchmaker sharedMatchmaker] finishMatchmakingForMatch:match];
} else {
NSLog(@"player IDs: %@", match.playerIDs);
}
}
}];
ただし、次の方法で GKPlayerStateConnected に変更されるまで、playerID を取得できません。
- (void)match:(GKMatch *)match player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state;
一致が見つかると、そのプレーヤーは GKPlayerStateUnknown になります。ただし、コード内の一致 NSLog() は playerID を示しています (これは間違いなく localPlayer の ID ではありません。実際の番号は編集されています)。
An auto-match has been found: <GKMatch 0x210b2c90 expected count: 1 seqnum: 0
G:1234567890:unknown
reinvitedPlayers:(
)>
試合の playerIDs 配列 (2 番目の NSLog()) は、試合が作成されるとすぐに空になります。これは、まだ公式に接続が確立されていないため意味があります。
player IDs: (
)
ようやく質問にたどり着きました(ご辛抱いただきありがとうございます):
1a) 不明な状態のプレーヤーの ID はどこから来たのですか?
1b) それは明らかに試合中にありますが、正確にはどこに保管されていますか? playerID に関連して見えるのは、空の配列だけです。
2) その playerID を取得する他の (合法的な) 方法はありますか? つまり、接続状態に変わる前に