我真的希望自己错了,但从我所知道的情况来看,如果一个玩家邀请一些朋友参加比赛但是留下了一些自动匹配的插槽,GameKit主持的配对根本不起作用 . 我可以让每个案例单独工作,但混合后,没有人可以连接 .

考虑三个玩家:A,B和C. A邀请B进入比赛并留下第三个位置 . C选择匹配三人游戏 .

现在,当B处理来自A的邀请时(由于在GKMatchmaker上注册了inviteHandler),他联系托管服务器以连接并设置其播放器就绪状态 . 然后,播放器A将获得一个委托消息给matchmakerViewController:didReceiveAcceptFromHostedPlayer:说B已连接 . 在双人游戏中,B可以在此时开始游戏并继续进行 . 相反,单击“立即播放”按钮会使匹配者等待第三个玩家到达 .

同时玩家C已选择自动添加到比赛中 . 如果A和B也要求自动添加,那么将通过委托matchmakerViewController:didFindPlayers:方法通知所有三个匹配 . 但是,点击“立即播放”按钮会使匹配者永远等待......玩家A也在等待......永远 . 玩家B只知道邀请者,玩家A,所以他在理论上可以尝试开始游戏,但这是没有意义的,因为A只知道一些参与者 .

我很难相信系统会有这样一个灾难性的缺陷,但我已经运行了这个场景,并且跟踪了相关GameKit类中暴露的所有委托方法,当玩家进入无限等待状态时就没有委派发送的消息 . 这就好像GameCenter并不完全了解A和B的存在,这有助于解释为什么A必须明确地将B标记为视图控制器中的存在,尽管显然已经“足够”以便首先接收到邀请 . 我也尝试让玩家C只请求一个双人游戏,这个想法也许这意味着玩家A只算作一个“可见”玩家 .

有没有人对此API有任何直接经验,并且可以明确声明它对此用例有效(或没有)?这对我来说是一个严重的问题;这几乎意味着我必须抛弃基于GameKit的配对代码并从头开始编写一些东西 .

提前感谢您提供任何信息 .