2012-10-28 35 views
3

我正在使用iOS 6 Game Center API進行回合制遊戲。基於回合的遊戲中心在離線時顯示遊戲狀態不正確

當設備從互聯網上斷開 在方法

[currentMatch endTurnWithNextParticipant:nextParticipant matchData:data completionHandler:^(NSError *error) { 
     if (error) { 
      NSLog(@"%@", error); 

     } else { 
      //save the new state of the game 
     } 

的完成處理我得到一個錯誤。但是,那麼顯示匹配列表的遊戲中心標準用戶界面會說「他們輪到」。當再次連接時,它變成「你的回合」。

來自着名教程http://www.raywenderlich.com/5509/beginning-turn-based-gaming-with-ios-5-part-2的代碼具有相同的確切問題。

我該如何處理這個問題?

+0

我有同樣的問題。你有沒有解決這個問題? 。如果你有問題請發表回答。 –

回答

4

如果您使用的是iOS 6的Game Center API,那麼你將不得不使用

-endTurnWithNextParticipants:turnTimeout:matchData:completionHandler: 

因爲......

–endTurnWithNextParticipant:matchData:completionHandler: Deprecated in iOS 6.0 

http://developer.apple.com/library/ios/#documentation/GameKit/Reference/GKTurnBasedMatch_Ref/Reference/Reference.html

+1

但是,這並不能解決原來的問題。它只會讓遊戲依賴於iOS6及更高版本。理想情況下,您應該在運行時決定是調用新的還是已棄用的,具體取決於您的遊戲運行的iOS版本(4.3/5.x或6.x) – kervich

-1

的事情是,當您使用改變匹配狀態的GC方法(在這種情況下爲matchData和同步信息),數據被上傳到GC服務器,以便其他玩家獲得更新。如果您斷開連接並忽略錯誤,您的本地GKTurnBasedMatch及其matchData更改以及您的同步信息(用於確定是否輪到您執行其他操作)。

但是,由於您是直接連接的,因此只有您的本地實例GCTurnBasedMatch已更新(您會收到錯誤,以便您的應用程序知道這一點)。重新連接後,您的應用會對用戶進行身份驗證並更新匹配狀態(如果您按照教程代碼進行操作)。更新匹配數據會恢復同步數據(所以它仍然是你的回合)。

此時,您應該再次提交轉(前提是你緩存gameData傳遞給GC,而你斷開連接)和/或撥打updateMatchData讓當地GKTurnBasedMatch及其matchData得到與什麼在同步服務器。如果您在重新連接後沒有重新提交轉牌,您也應該使用之前的轉牌數據重新佈置您的遊戲板。