2012-05-02 7 views
4

GameKitを使用しているiOSアプリで、ターンベースの試合でユーザーが「順番に」終了すると、GKTurnBasedMatchmakerViewControllerでデリゲートメソッド-(void)turnBasedMatchmakerViewController: (GKTurnBasedMatchmakerViewController *)viewController playerQuitForMatch:(GKTurnBasedMatch *)match;が呼び出されます。ドキュメントでは、現在のプレーヤーの場合participantQuitInTurnWithOutcome:nextParticipant:matchData:completionHandlerGKTurnBasedMatchが終了してから終了する

ただし、ターン終了時のプレーヤーに関する情報は見つかりません。それは私のターンではない時で、私は中傷のビューコントローラーから辞めました。私のアプリをデバッグすることで、ターンが送信されていることを知ることができます(それは現在の試合では私のターンではありませんが)。

誰もが行動を説明して、正しい方法で終了時の終了を処理することができます。

答えて

0

あなたは試合の現在の参加者を確認し、それがあなたであるかどうかを確認できます。送信されたトラフィックに関して、Game Centerは他のプレイヤーにあなたが終了したことを知らせる必要はありませんか?

GKTurnBasedMatchについては、それが呼ばれています:playerQuitForMatch:turnBasedMatchmakerViewController

participantQuitOutOfTurnWithOutcome:withCompletionHandler: 

あなたのGKTurnBaseMatchMakerViewControllerDelegateでそれを呼び出すことができますが、関数が呼び出され

-1

は、実際には、ターンの外に終了する方法があります。

参照してくださいあなたが参加を通じて

-(void)handleTurnEventForMatch:(GKTurnBasedMatch *)match 

ループでこのシナリオを処理し、トリガープレイヤーが地元選手で、彼の結果がある場合は、「終了」、とすることができますhere

+2

turnBasedMatchmakerViewController:playerQuitForMatch:プレーヤーがターンを終了すると呼び出されないため、これは機能しません。 – brimat

2

公式ドキュメント彼は現在の参加者ではありません(これは別の場所で処理されます-turnBasedMatchmakerViewController:playerQuitForMatch :)。次に、ゲームを順番に終了します。

for (int i = 0; i < [match.participants count]; i++) 
{    
    GKTurnBasedParticipant *p = [match.participants objectAtIndex:i]; 

    if ([p.playerID isEqualToString:[GKLocalPlayer localPlayer].playerID]) 
    { 
     // Found player 

     if (p.matchOutcome == GKTurnBasedMatchOutcomeQuit) 
     { 
      // Player Quit... ignore current participants and end out of turn only for the other player 
      if (![match.currentParticipant.playerID isEqualToString:p.playerID]) 
      { 
       // not the current participant and he quit 
       [match participantQuitOutOfTurnWithOutcome:GKTurnBasedMatchOutcomeQuit withCompletionHandler:nil]; 
       break; 
      }    
     } 
    } 
} 
関連する問題