我真的希望自己错了,但据我所知,如果玩家邀请一些朋友参加比赛但是留下了一些自动匹配的插槽,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的配对代码并从头开始写一些东西。
提前感谢任何信息。