2012-05-02 57 views
4

當用戶在使用GameKit的iOS應用程序的基於回合的匹配中「反過來」退出時,在GKTurnBasedMatchmakerViewController上調用委託方法-(void)turnBasedMatchmakerViewController: (GKTurnBasedMatchmakerViewController *)viewController playerQuitForMatch:(GKTurnBasedMatch *)match;,根據文檔,我們應該設置結果對於目前的球員,並呼籲participantQuitInTurnWithOutcome:nextParticipant:matchData:completionHandlerGKTurnBasedMatch退出

但是,我無法找到關於球員在quiting不合時宜的任何信息。那時候輪到我了,我退出媒人視圖控制器。似乎沒有任何委託方法,令人驚訝的是,通過調試我的應用程序,我發現這個轉變已經發出(儘管目前還沒有進入比賽)。

任何人都可以請解釋的行爲,並處理了之交退出的正確方法。

回答

0

您可以檢查這是從匹配當前的參與者,看看是否是你。至於發送的流量,Game Center是否需要通知所有其他玩家您已經退出?

-1

其實是有退出了轉彎的方法:

對於GKTurnBasedMatch它被稱爲:

participantQuitOutOfTurnWithOutcome:withCompletionHandler: 

你可以把它在你的GKTurnBaseMatchMakerViewControllerDelegate,當turnBasedMatchmakerViewController:playerQuitForMatch:函數被調用。

請參閱官方文檔here

+2

turnBasedMatchmakerViewController:playerQuitForMatch:在玩家退出時不會被調用,所以這是行不通的。 – brimat

2

您可以通過參加

-(void)handleTurnEventForMatch:(GKTurnBasedMatch *)match 

循環處理這種情況下,如果觸發球員是本土選手,他的結局是「退出」,並他不是當前的參與者(在另一個地方處理--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; 
      }    
     } 
    } 
}