【问题标题】:GameKit turn timeoutGameKit 转弯超时
【发布时间】:2015-08-21 03:01:55
【问题描述】:

GameKit 允许我们为比赛中的下一位参与者以超时结束回合。但是,我找不到为第一个参与者的第一步设置超时的方法。有什么办法吗?

编辑 我开始明白为什么 Apple 会把它从 GameKit 中剔除。当您刚刚加入 GKTurnBasedMatch 时,您将始终轮流进行,因此无需暂停,因为添加它是为了避免玩家在轮到他们时等待太久而感到沮丧。问题是我的超时用例是不同的。我正在设计一场比赛,暂停意味着你输掉了比赛,无论是否是第一回合。所以我总是需要有能力让当前回合超时。恐怕我需要在糟糕的服务器上实现它。

【问题讨论】:

  • 开始游戏时,您可以进行“幽灵”转身,例如。以endTurnWithNextParticipants:turnTimeout:matchData:completionHandler 开始游戏 - 可以吗?
  • 感谢您的建议。不确定这是否可行,因为当您是第一个加入 GKTurnBasedMatch 的玩家时,您通常没有其他参与者。
  • 但是如果它是第一个玩家并且你结束了回合,它会转移到下一个玩家或寻找新玩家,当下一个玩家轮到他们时,他们将不得不在轮到您定义的超时。我已经有一段时间没有做 Game Center 的东西了,所以我可能有点生疏,但我很确定我以前做过类似的事情。

标签: gamekit gkturnbasedmatch


【解决方案1】:

这可能有点晚了,但 Game Center TBM 超时不会那样工作。

当您调用 endTurnWithNextParticipants 时,您必须提供一个玩家列表,如果前一个超时,他们将获得轮到。如果您希望玩家在他/她超时时输掉游戏,您必须执行此操作,例如在下一位收到转牌的玩家的客户端上,Apple 发球不会为您执行此操作。

根据您的目标,我认为最好的实现是检查最近一轮的播放时间,或者如果是第一轮,则将其与当前系统日期进行比较,然后如果时间结束,则以编程方式结束比赛。

【讨论】:

    【解决方案2】:

    正如你所指出的,作为第 1 回合的玩家 1,还没有任何其他玩家,所以我怀疑这就是为什么 GC 没有给我们一个接口来为玩家 1 设置超时。

    如何将 NSTimer 设置为所需的超时时间,然后在它触发时结束回合?

    如果您正在查看较长的超时时间,比如几天,用户可能会在超时后离开然后重新加入,您可以通过将超时间隔添加到比赛开始时间来计算所需的截止日期,并将其存储起来在 NSUserDefaults 中。每次游戏启动时,检查是否已超过最后期限,并在适当的时候结束回合。

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 1970-01-01
      • 2021-12-18
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多