【问题标题】:Is there a way to update matchData in a GKTurnBasedMatch without sending out "Your Turn" push notifications?有没有办法在不发送“轮到你”推送通知的情况下更新 GKTurnBasedMatch 中的 matchData?
【发布时间】:2012-03-18 16:51:14
【问题描述】:

如果我的理解是正确的,那么在转弯中更新 GKTurnBasedMatch 的 matchData 属性的唯一方法是 [_currentMatch endTurnWithNextParticipant:_currentParticipant matchData:matchData completionHandler:nil]。

如果 Game Center 玩家只在一台设备上安装了游戏,这会很有效,因为通知会作为消息传递到设备上。因此,可以在用户当前轮到他的时候隐藏通知。但是,如果用户在多台设备上安装了游戏,其他设备将收到“轮到你”的推送通知。这让用户感到困惑,尤其是我多次更新 matchData。

顺便说一句,我知道我可能没有按预期使用 endTurnWithNextParticipant:matchData:completionHandler: 函数(因为事实上我并没有结束比赛......而只是更新 matchData)。但是,似乎没有其他方法可以在回合中更新比赛的状态。

【问题讨论】:

标签: ios game-center gamekit


【解决方案1】:

iOS 6 中添加了中期节省:

-[GKTurnBasedMatch saveCurrentTurnWithMatchData:completionHandler:]

来源:GKTurnBasedMatch Class Reference

【讨论】:

    【解决方案2】:

    有趣的是,为了解决您最初的问题,似乎 saveCurrentTurnWithMatchData 仍然 会向其他玩家发送推送通知,即使当前玩家的回合尚未结束!

    在我看来,这似乎是一个 GameKit 设计缺陷——在还没轮到对手的应用程序图标上显示徽章似乎具有内在的误导性。打开它发现它只是一次又一次的虚惊,真是太可惜了!

    如果有人在调用 saveCurrentTurnWithMatchData 时找到了抑制这些推送通知的方法,我很想听听您是如何做到的。

    更新:我发起了new thread 来解决这个问题。

    【讨论】:

      【解决方案3】:

      实际上不应该在回合期间更新比赛数据。其他玩家在轮到他们之前都无法做出反应,因此只需在游戏从一个玩家过渡到另一个玩家时传递数据。

      【讨论】:

      • 总有一个原因:)。我的理由是:设备之间的数据持久性以及防止作弊,例如在你知道自己会输的情况下在回合结束前强行退出。
      • 回合制游戏通常需要在轮到其他玩家时发送额外数据。例如,聊天消息可以作为比赛数据发送,并且在使用派对或小队游戏的回合制游戏中非常常见。甚至像 Words with Friends 这样的面对面游戏也允许在回合之间发送聊天消息。
      • 在随机生成棋盘的游戏中,最好在轮到玩家之前将棋盘保存到 GameCenter,否则玩家可能会重新加载应用程序以更改游戏棋盘。
      猜你喜欢
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多