iphone - 实时 GKMatch 断开连接问题

标签 iphone ios xcode game-center

我使用 GameCenter 和实时服务器-客户端网络策略创建了一个纸牌游戏。在沙盒中测试时,游戏运行完美(建立连接、选择最佳主机、发送/接收数据),有时游戏甚至可以毫无问题地完成。然而,大多数情况下,在这两种设备上,我都会收到一个 match:player:didChangeState: 回调,通知我对方用户已断开连接。它经常令人沮丧地发生,并且似乎与不活动或超时没有任何关系。我的想法是我可能正在处理 GameCenter 服务器上的正常网络延迟,因为在极少数情况下玩家似乎会重新连接并再次发送数据。还有其他人使用 GKMatch 和 Real Time GameCenter 处理这些问题吗?我正在运行 iOS 6.1 并连接到同一 wifi 网络的 iPhone 5 和 iPhone 4 上测试该应用程序。

最佳答案

我在 MAX player=2 时遇到了同样的问题。 对我来说是 GKMatch 的代表

- (void)match:(GKMatch *)match player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state; 

即使用户在游戏中处于事件状态,也会将“state”返回为“GKPlayerStateDisconnected”。 对我有用的解决方案如下: 在我的 NetworkManager 类中,我将当前匹配引用为 gkMatch。因此,每当我再次获得“状态”为“GKPlayerStateDisconnected”时,我都会检查它是否真的与远程播放器断开连接。为此,我使用“gkMatch”数据如下: ps:如果 session 实际上没有断开,它包含的字符串为“connected”。

NSString *gkMatchString = [NSString stringWithFormat:@"%@",[NetworkManager sharedManager].gkMatch];

        if ([gkMatchString rangeOfString:@"connected"].location == NSNotFound) 
          {
            NSLog(@"Session is actually closed.");
          }else{
            NSLog(@"Session is NOT yet closed.");
          }

它对我有用,所以如果它对任何人有帮助,请告诉我。

关于iphone - 实时 GKMatch 断开连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14299248/

相关文章:

iphone - 动画 UIView 更改,其中 UIView 完全重建

ios - 如何在选择每个图标时为每个图标设置不同的 UITabBar.tintColor ?

ios - IPA 大小和性能

iphone - 无论旋转如何锁定方向

iphone - iOS 模拟器在启动时崩溃(间歇性),在设备上没有崩溃

ios - 如何调用 TableView Controller 中的函数?

ios - Firebase iOS GoogleSignIn 无需单击默认登录按钮即可切换

c++ - 用waf生成xcode工程

xcode - Interface Builder 文件中的未知窗口类(空),而是创建通用窗口

iphone - 将触摸事件传递给 iOS 状态栏