0

私は Game Center のコードで問題が発生し、研究を重ねて研究し、受け入れられている標準的なアプローチと思われるものを使用しています。どこで問題が発生しているのかわかりません。

私は 4 人用のカード ゲームを書いています。脱落したプレイヤーがいる場合は、ゲームに招待してもらいたいと思っています。

シナリオは次のとおりです。試合が行われており、すべてのプレイヤーがゲームに参加しています。1 人のプレーヤーがゲームから脱落します。指定されたホストは切断を検出し、 を使用してドロップアウトに招待を送信しaddPlayersToMatchます。ドロップアウトのinviteHandlerが最初に設定されており、発火します。ドロップアウトは招待を受け取り、標準コードと思われるものを呼び出します。

GKMatchmakerViewController *mmvc
mmvc = [[GKMatchmakerViewController alloc] initWithInvite:_pendingInvite];
mmvc.matchmakerDelegate = self;
[_presentingViewController presentViewController:mmvc animated:YES completion:nil];

ドロップアウト マシンでは、MatchMakerViewController が適切に表示され、すでに試合に参加しているプレイヤーのみが表示され、すぐに「準備完了」とマークされます。ただし、コントローラーには「ゲームが開始されるのを待っています...」というメッセージが表示され、起動されdidFindMatchません。ゲームを開始するための UI はありません (唯一のボタンは左上の [キャンセル] です)。

奇妙なことは、ホスト マシンinviteeResponseHandlerが起動するため、ドロップアウトが戻ってきたというメッセージをホストが受け取ったようです。こちらに電話finishMatchmakingForMatchしていますが、何もしていないようです。

では、ドロップアウトに MatchMakerViewController を閉じるように指示するにはどうすればよいでしょうか?

髪を引き裂く!

4

1 に答える 1

0

マッチメーカー デリゲートで did find match メソッドを処理していますか?

(私のコードは迅速であることに注意してください)しかし、obj cに簡単に移植できます

// ピアツーピアの一致が見つかりました。ゲームを開始する必要があります

public func matchmakerViewController(viewController:  GKMatchmakerViewController!, didFindMatch match: GKMatch!)
{
    println("didFindMatch");
    if (!_matchStarted && match.expectedPlayerCount == 0) {
        match.delegate = self;
        mmvc.dismissViewControllerAnimated(true,completion:completedBlock);
    }

}
于 2015-04-02T17:58:37.413 に答える