我开发了一款使用GameCenter的iPhone应用程序。为了支持我的游戏的不同级别,我将playerGroup设置在GKMatchRequest
类中。如果通过自动匹配制作过程开始匹配,则两个用户都知道playerGroup,但是如果使用了邀请过程,则被邀请者不知道playerGroup。
我试图在方法
中读取playerGroup- (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match
使用
[viewController matchRequest].playerGroup
,但属性playerGroup始终返回0,而不是正确的玩家组。
有没有人知道如何解决这个问题。我需要知道playerGroup加载正确的级别。
非常感谢您的帮助
答案 0 :(得分:1)
据我所知,这是Game Center的内置限制。我一直在努力解决这个问题,并在包括Apples devforums在内的几个论坛上提出了问题,没有任何回应。我已经向Apple写了一个错误报告,我建议你也这样做。
作为我自己的游戏中的一种解决方法,我有几个不同的规则集供玩家选择,玩家必须共享相同的多人游戏规则才能工作,我在游戏实际开始后进行了“双重检查”确保每个人都遵循相同的规则:以防有人被邀请并且使用了错误的规则。
我做的是,一旦游戏开始(您应该在 GKMatchMakerViewControllerDelegate 的 didFindMatch 方法和匹配:播放器中检测到它) :didChangeState:在 GKMatchDelegate 中)我让玩家进入游戏,然后将包含他们使用的规则的包发送给所有其他玩家。当他们收到这些数据时,会将其与自己的规则相匹配,如果有人使用了错误的规则,游戏会发出警报并断开匹配。
这有点难看,很明显Apple应该实现一种方法,在邀请函初始化时为GKMatchMakerViewController设置GKMatchRequest。但至少它有效。
答案 1 :(得分:1)
在客户收集完所有信息后,将创建并启动实际游戏逻辑。
答案 2 :(得分:0)
你可以像这样检查一个匹配请求的玩家组。
func player(player: GKPlayer, didAcceptInvite inviteToAccept: GKInvite) {
if inviteToAccept.playerGroup == 0 || inviteToAccept.playerGroup == myPlayerGroup {
inviteAccepted()
}
else {
// TO SOMETHING
myPlayerGroup = inviteToAccept.playerGroup
inviteAccepted()
}