我已经制作了iOS多人GameCenter游戏,但在发布之前发现了一个我不知道如何解决的问题 . 在编码过程中我使用了Ray Wenderlich教程http://www.raywenderlich.com/3276/how-to-make-a-simple-multiplayer-game-with-game-center-tutorial-part-12
显示GameCenter视图控制器,连接创建和游戏可以播放,直到两个设备在同一个Wifi网络上 . 如果我在手机上关闭Wifi并使用3G网络,那么尝试开始新游戏 - 在这种情况下,不再进行连接 . 两台设备互相找到,但挂在"Connecting..."屏幕上 . 它看起来像那样
- (void)match:(GKMatch *)theMatch player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)状态
不叫 . 任何想法如何解决或至少理解,问题究竟在哪里?
1 回答
我试图在iPad上通过蓝牙连接到iPhone上时也遇到了这个问题:每个设备上都有“正在连接......”屏幕 . 但是,当我使用内置的iPad 3G(具有不同的资费计划)时,一切都很顺利 .
match:player:didChangeState:
. 你还应该检查match.expectedPlayerCount
:-[GKMatch rematchWithCompletionHandler:^(GKMatch *match, NSError *error) {}]
重新匹配 .一台设备挂在"Connecting..."屏幕上,但在另一台
matchmakerViewController:didFindMatch:
被成功调用,但有趣的是match.expectedPlayerCount
1121560 andmatch.playerIDs
阵列同时为空 .我认为发生这样的错误是因为我试图找到一个新的匹配,而前一个匹配尝试在同一时间重新连接后台线程 . 而且因为新的比赛被破坏了 .
决定是等待调用rematchCompletion,然后再尝试查找新匹配 .
GKMatch
中没有接口取消重新匹配,所以我使用[[GKMatchmaker sharedMatchmaker] cancel]
并在几秒钟后调用rematchCompletion并出现错误,我们准备开始寻找新匹配 .另外我发现旧的未发布的GKMatch实例没有被释放,并继续存在于GameKit框架中的某个地方 . 如果使用它们的工作没有正确完成(即没有断开连接,或者在我的情况下没有取消匹配),它们可能会引起问题 . 因此,在删除对匹配对象的最后一个强引用之前,不要忘记调用
-[GKMatch disconnect]
并完成任何其他类型的工作 .