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
        }

我得到一个错误。但是随后,显示匹配列表的游戏中心标准 UI 显示“轮到他们了”。再次连接时,它变为“轮到你了”。

http://www.raywenderlich.com/5509/beginning-turn-based-gaming-with-ios-5-part-2上著名教程的代码有同样的问题。

我应该如何处理这个问题?

4

2 回答 2

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

于 2012-12-07T17:09:00.993 回答
-1

问题是,当您使用改变比赛状态的 GC 方法(matchData在这种情况下是同步信息)时,数据会上传到 GC 服务器,以便其他玩家获得更新。如果您断开连接并忽略错误、您的本地GKTurnBasedMatch及其matchData更改,以及您的同步信息(用于确定是否轮到您采取其他措施)。

但是,由于您是断开连接的,因此只有您的本地实例GCTurnBasedMatch被更新(您会收到错误,以便您的应用程序知道这一点)。当您重新连接时,您的应用程序会对用户进行身份验证并更新匹配状态(如果您遵循教程代码)。更新比赛数据会恢复同步数据(所以现在轮到你了)。

此时,您应该再次提交轮次(前提是您缓存gameData了在断开连接时传递给 GC 的内容)和/或调用updateMatchData,以便您的本地GKTurnBasedMatch及其matchData与服务器上的内容同步。如果您在重新连接后没有重新提交回合,您还应该使用前一回合的数据重新布局您的游戏板。

于 2013-06-07T10:56:58.870 回答