3

数週間前、私は iOS 5 で動作する TurnBased の 2 プレーヤー ゲームを作成しました。

このゲームでは、プレーヤーが独自のインターフェイスからフレンドから対戦相手を選択できるようにし、マッチ メイキング ビューを表示するときに GKMatchRequest のplayersToInvite プロパティを使用して、自動的に対戦相手を招待できるようにします。

iOS6 より前では「何もしない」と書かれているドキュメントとは対照的に、iOS5 での実行時に GKTurnBasedMatchmakerViewController が選択したプレイヤーを自動的に選択し、招待を開始する効果があります。

リクエストが返ってきたら、次の場所で:

- (void)turnBasedMatchmakerViewController:(GKTurnBasedMatchmakerViewController *)viewController didFindMatch:(GKTurnBasedMatch *)match 

このアプリはすぐにターンを実行し、次のプレーヤーに渡します。これにより、実際の招待が相手のターンに合わせて発生し、そこからゲームがうまく進みます。

上記のデリゲート呼び出しの match.participants には両方とも有効な playerID プロパティが含まれているため、「nextParticipant」呼び出しが可能かつ有効になります。

これまでのところ、iOS 5 で問題なく動作しています。

ただし、iOS 6 で実行している場合は、

- (void)turnBasedMatchmakerViewController:(GKTurnBasedMatchmakerViewController *)viewController didFindMatch:(GKTurnBasedMatch *)match 

そして、2 番目の参加者の playerID が nil であることを発見し、それを次の参加者として設定しようとすると、「不明な操作」で失敗します。

さらに調査すると、通常どおりマッチ リクエストを開始した後、GC UI で招待をキャンセルし、GC UI を介して再度招待すると、すべて期待どおりに機能します。招待が失敗するのは、playersToInvite を自分で設定した場合のみです。iOS6 の誤った nil を除いて、すべてのケースで playerID が正しいことを確認しました。

iOS5 で実行すると、これはすべて正しく動作することに注意してください。

Apple は iOS5 で動作させ、動作しないと主張し、iOS6 でそれを壊して動作すると主張したようです :)

4

1 に答える 1

3

これが誰かに役立つ場合に備えて:

iOS6の特定の実装を追加することでこれを解決しました。そのため、プレーヤーを招待するときは、iOS5 のように MatchMakerVC を起動するのではなく、プログラムで実行してください。

[GKTurnBasedMatch findMatchForRequest: request withCompletionHandler:^(GKTurnBasedMatch *match, NSError *error)

これは、ユーザーに「次へ」を 3 回タップすることを強制しないため、実際には iOS5 よりもうまく機能します。

私はまだ元の問題をバグだと考えており、ここで無駄な報奨金で50の評判を犠牲にしましたが、私たちは生きて学び、忘れて再び学びます:)

于 2012-10-17T14:30:15.677 に答える