1

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

我试图在方法中读取 playerGroup

-   (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match

通过使用

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

有谁知道如何解决这个问题。我需要知道 playerGroup 才能加载正确的关卡。

非常感谢您的帮助

4

3 回答 3

1

据我所知,这是游戏中心的内置限制。我也一直在为此苦苦挣扎,并在包括 Apples devforums 在内的几个论坛上提问,但没有任何回应。我已经向 Apple 写了一份错误报告,我建议你也这样做。

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

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

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

于 2011-04-05T04:51:18.127 回答
1

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

在客户端收集所有信息之后,实际的游戏逻辑将在此基础上创建和启动。

于 2012-11-27T17:29:19.170 回答
0

您可以像这样检查比赛请求的玩家组。

func player(player: GKPlayer, didAcceptInvite inviteToAccept: GKInvite)    {
    if inviteToAccept.playerGroup == 0 || inviteToAccept.playerGroup == myPlayerGroup  {
        inviteAccepted()
    }
    else {
        // TO SOMETHING
        myPlayerGroup = inviteToAccept.playerGroup
        inviteAccepted()
    }
于 2016-06-28T22:18:30.123 回答