基于回合的游戏中心在离线时显示游戏状态不正确

时间:2012-10-28 12:12:02

标签: ios game-center

我正在使用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着名教程中的代码具有完全相同的问题。

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

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 :(得分:-1)

问题是,当您使用改变匹配状态的GC方法(在这种情况下为matchData和同步信息)时,数据会上传到GC服务器,以便其他玩家获得更新。如果您已断开连接并忽略该错误,则会更改您的本地GKTurnBasedMatch及其matchData以及您的同步信息(用于确定是否轮到您执行其他操作)。

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

此时,您应该再次提交回合(假设您在断开连接时已缓存gameData)并且/或致电updateMatchData以便您的本地{{1并且它的GKTurnBasedMatch与服务器上的内容同步。如果您在重新连接后没有重新提交转弯,您还应该使用之前的转弯数据重新布局您的游戏板。