2011-03-31 11 views
8

我得到一些行爲,我無法從GameKit解碼。麻煩協商遊戲工具包中的兩名玩家匹配

有時已經完成邀請的玩家卡在'等待...'循環中,並且無法在他的邀請中結束交易。

我相信它與多任務和邀請處理程序有關...似乎如果被邀請者的應用程序從頭開始,那麼邀請可以被正確接受。但是這種機制對我來說並不那麼透明。

任何線索可能會丟失什麼?我已經被文檔蒙上了一層陰影。

+0

我面臨着同樣的問題太..通常應用程序需要一個「新鮮開始」,它再次運作... – xuanweng 2011-04-01 07:57:03

+1

xuanweng,我相信我找到了一個解決方案...它是在文檔中建議inviteHandler準備在authenticateLocalPlayerWithCompletionBlock完成塊。我已經將我的prepareInviteHandler設置爲在if(error == nil)塊中調用。在這個if/then語句(在文檔代碼中提供)之前,將調用準備好邀請處理程序似乎可以消除此問題。 – 2011-04-05 15:25:25

+0

您應該提交此答案並接受您自己的答案以將問題標記爲已解決。 – 2011-09-13 15:38:32

回答

1

有時當兩名球員之間的比賽開始時,有可能一名球員還沒有連接狀態。您應該檢查是否有更多的玩家在實際開始遊戲之前需要連接。如果超過0,則不要開始遊戲,而要等待玩家連接,並且只有在該玩家連接時纔開始遊戲。

因此,代碼會看起來像這樣的方法中,你要設置的遊戲:

if (currentMatch.expectedPlayerCount) { 
    waiting = YES; 
} 

你會實現這個委託方法:

- (void)match:(GKMatch *)match player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state 
{ 
    if (state == GKPlayerStateConnected) { 
     if (waiting) { 
      waiting = NO; 
      // start the game now 
     } 
    } else if (state == GKPlayerStateDisconnected) { 
     // handle disconnect 
    } 
}