これについて私が間違っていることを本当に願っていますが、私が知る限り、GameKit がホストするマッチメイキングは、プレイヤーが何人かの友人をマッチに招待し、オートマッチ用にいくつかのスロットを開いたままにしておくと、単に機能しません. 各ケースを個別に動作させることはできますが、混合すると誰も接続できなくなります。
A、B、C の 3 人のプレーヤーを考えてみましょう。A は B を試合に招待し、3 番目のスロットを空けたままにします。C は 3 プレーヤー ゲームにマッチすることを選択します。
ここで、B が A からの招待を処理するとき (GKMatchmaker に InviteHandler を登録したことにより)、B はホスティング サーバーに接続して接続し、プレーヤーの準備完了状態を設定します。プレイヤー A は、B が接続したことを示すデリゲート メッセージを matchmakerViewController:didReceiveAcceptFromHostedPlayer: に受け取ります。2 人用のゲームでは、B はこの時点でゲームを開始して続行することができます。代わりに、[今すぐプレイ] ボタンをクリックすると、マッチメーカーは 3 番目のプレイヤーが到着するまで待機します。
一方、プレイヤー C は自動的にマッチに追加されることを選択しました。A と B も自動的に追加するように要求した場合、3 つすべてに、デリゲートの matchmakerViewController:didFindPlayers: メソッドを介して一致が通知されます。ただし、代わりに [今すぐプレイ] ボタンをクリックすると、マッチメーカーは待機します... 永遠に。プレーヤー A も待っています... 永遠に。プレイヤー B は招待者であるプレイヤー A についてしか知らないので、理論的にはゲームを開始しようとすることもできますが、A は参加者の一部しか知らないため、それは無意味です。
システムにこのような壊滅的な欠陥があるとは信じがたいですが、私はこのシナリオを実行し、関連する GameKit クラスで公開されているすべてのデリゲート メソッドをトレースしました。送信された委任メッセージ。あたかも GameCenter が A と B の存在を完全に認識していないかのようです。これは、そもそも招待を受け取るのに「十分」に表示されていたにもかかわらず、A がビュー コントローラーに B が存在することを明示的にマークしなければならない理由を説明するのに役立ちます。 . また、プレイヤー C が 2 プレイヤー ゲームのみを要求するようにしてみました。これは、プレイヤー A が 1 人の「目に見える」プレイヤーとしてカウントされることを意味する可能性があるという考えに基づいています。
誰かがこの API を直接使用した経験があり、このユースケースで機能する (または機能しない) ことを明示的に主張できますか? これは私にとって深刻な問題です。これは、GameKit ベースのマッチメイキング コードを破棄して、何かを完全にゼロから作成する必要があることを意味します。
情報をお寄せいただきありがとうございます。