我真的希望我对此是错误的,但据我所知,如果玩家邀请一些朋友参加比赛但留下一些空位供自动机使用,GameKit 托管的配对根本不起作用。我可以让每个案例单独工作,但是当混合时,没有人可以连接。
考虑三个玩家:A、B 和 C。A 邀请 B 参加比赛并留下第三个空位。C选择匹配成三人游戏。
现在,当 B 处理来自 A 的邀请时(由于在 GKMatchmaker 上注册了一个邀请处理程序),他联系托管服务器进行连接并设置他的玩家就绪状态。然后玩家 A 将收到一条委托消息给 matchmakerViewController:didReceiveAcceptFromHostedPlayer: 说 B 已连接。在两人游戏中,此时 B 可以开始游戏并继续进行。相反,单击“立即播放”按钮会导致媒人等待第三位玩家到达。
同时玩家 C 已选择自动添加到比赛中。如果 A 和 B 也要求自动添加,则所有三个都将通过委托 matchmakerViewController:didFindPlayers: 方法收到匹配通知。然而,相反,单击“立即播放”按钮会导致媒人等待……永远。玩家 A 也在等待……永远。玩家 B 只知道邀请者玩家 A,所以理论上他可以尝试开始游戏,但这毫无意义,因为 A 只知道一些参与者。
我很难相信这个系统会有这样一个灾难性的缺陷,但我已经运行了这个场景,并跟踪了相关 GameKit 类中暴露的所有委托方法,当玩家进入无限等待状态时,没有发送的委托消息。就好像 GameCenter 并不完全知道 A 和 B 的存在,这将有助于解释为什么 A 必须明确地将 B 标记为存在于视图控制器中,尽管显然已经“足够”可见以首先收到邀请. 我还尝试让玩家 C 仅请求两人游戏,其想法可能是这意味着玩家 A 仅被视为一个“可见”玩家。
有没有人对这个 API 有任何直接的经验,并且可以明确声明它适用于这个用例(或不适用)?这对我来说是一个严重的问题;这几乎意味着我必须扔掉基于 GameKit 的配对代码并完全从头开始编写一些东西。
提前感谢您提供任何信息。