带有playerGroup的iPhone GameCenter邀请

时间:2011-03-30 07:53:47

标签: iphone game-center invitation

我开发了一款使用GameCenter的iPhone应用程序。为了支持我的游戏的不同级别,我将playerGroup设置在GKMatchRequest类中。如果通过自动匹配制作过程开始匹配,则两个用户都知道playerGroup,但是如果使用了邀请过程,则被邀请者不知道playerGroup。

我试图在方法

中读取playerGroup
-   (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match

使用

[viewController matchRequest].playerGroup,但属性playerGroup始终返回0,而不是正确的玩家组。

有没有人知道如何解决这个问题。我需要知道playerGroup加载正确的级别。

非常感谢您的帮助

3 个答案:

答案 0 :(得分:1)

据我所知,这是Game Center的内置限制。我一直在努力解决这个问题,并在包括Apples devforums在内的几个论坛上提出了问题,没有任何回应。我已经向Apple写了一个错误报告,我建议你也这样做。

作为我自己的游戏中的一种解决方法,我有几个不同的规则集供玩家选择,玩家必须共享相同的多人游戏规则才能工作,我在游戏实际开始后进行了“双重检查”确保每个人都遵循相同的规则:以防有人被邀请并且使用了错误的规则。

我做的是,一旦游戏开始(您应该在 GKMatchMakerViewControllerDelegate didFindMatch 方法和匹配:播放器中检测到它) :didChangeState: GKMatchDelegate 中)我让玩家进入游戏,然后将包含他们使用的规则的包发送给所有其他玩家。当他们收到这些数据时,会将其与自己的规则相匹配,如果有人使用了错误的规则,游戏会发出警报并断开匹配。

这有点难看,很明显Apple应该实现一种方法,在邀请函初始化时为GKMatchMakerViewController设置GKMatchRequest。但至少它有效。

答案 1 :(得分:1)

我解决了同样的问题。作为一种解决方法,我通过GKMatch对象发送与所有相关游戏定制信息的握手。我使用GKMatchSendDataReliable DataMode发送数据,因此握手不会失败。

在客户收集完所有信息后,将创建并启动实际游戏逻辑。

答案 2 :(得分:0)

你可以像这样检查一个匹配请求的玩家组。

func player(player: GKPlayer, didAcceptInvite inviteToAccept: GKInvite)    {
    if inviteToAccept.playerGroup == 0 || inviteToAccept.playerGroup == myPlayerGroup  {
        inviteAccepted()
    }
    else {
        // TO SOMETHING
        myPlayerGroup = inviteToAccept.playerGroup
        inviteAccepted()
    }