来自不同网络的iOS GameCenter连接
我制作了一款iOS多人游戏中心游戏,但就在发布之前,我发现了一个问题,我不知道如何解决。在编码过程中,我使用了Ray Wenderlich教程来自不同网络的iOS GameCenter连接,ios,connection,game-center,multiplayer,Ios,Connection,Game Center,Multiplayer,我制作了一款iOS多人游戏中心游戏,但就在发布之前,我发现了一个问题,我不知道如何解决。在编码过程中,我使用了Ray Wenderlich教程 显示GameCenter视图控制器,创建连接并播放游戏,直到两台设备位于同一Wifi网络上。 如果我关掉手机上的Wifi,使用3G网络,然后试着开始新的游戏-在这种情况下,连接就不复存在了。两台设备都可以找到对方,但都挂在“连接…”屏幕上。看起来是这样的 -(无效)匹配:(GKMatch*)匹配玩家:(NSString*)玩家ID didChangeSt
显示GameCenter视图控制器,创建连接并播放游戏,直到两台设备位于同一Wifi网络上。 如果我关掉手机上的Wifi,使用3G网络,然后试着开始新的游戏-在这种情况下,连接就不复存在了。两台设备都可以找到对方,但都挂在“连接…”屏幕上。看起来是这样的
-(无效)匹配:(GKMatch*)匹配玩家:(NSString*)玩家ID didChangeState:(GKPlayerConnectionState)状态
不叫。有没有解决问题的办法,或者至少了解问题到底在哪里
match:player:didChangeState:
可能不会被调用。您还应该检查匹配。expectedPlayerCount:
- (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)theMatch {
//...
if (theMatch.expectedPlayerCount == 0) {
NSLog(@"Ready to start match!");
}
}
-[GKMatch rematchWithCompletionHandler:^(GKMatch*match,NSError*error){}]
尝试重新匹配之后
一个设备挂在“连接…”屏幕上,但另一个设备成功调用了matchmakerViewController:didFindMatch:
,但有趣的是匹配。expectedPlayerCount
为0
和匹配。playerId
数组同时为空
我认为发生这种错误是因为我试图找到一个新的匹配,而上一个匹配试图同时在后台线程上重新连接。因为新的匹配被破坏了
决定是等待调用rematchCompletion,然后再尝试寻找新的匹配项。在GKMatch
中没有取消重新匹配的接口,因此我使用[[GKMatchmaker sharedMatchmaker]cancel]
并在几秒钟后调用rematchCompletion,但出现错误,我们准备开始查找新的匹配
我还发现旧的未命名GKMatch实例并没有被释放,而是继续存在于GameKit框架中的某个地方。如果他们的工作没有正确完成(即没有断开连接,或者在我的情况下没有取消重赛),他们可能会导致问题。因此,在删除对匹配对象的最后一个强引用之前,不要忘记调用-[GKMatch disconnect]
并完成任何其他类型的工作我已经看到expectedPlayerCount为0,PlayerId也为空,与任何复赛无关。(我不使用复赛。)