从GKTurnBasedMatchMakerViewController检索GKTurnBasedMatch对象-Swift 4

时间:2019-04-18 13:37:45

标签: swift game-center gkturnbasedmatch

我正在尝试实施回合制多人游戏(2人策略棋盘游戏)。我设法对本地播放器进行了身份验证,并提出了GKTurnBasedMatchmakerViewController(标准接口)。

我对如何获取播放器选择的GKTurnBasedMatch对象(如果有)感到困惑。为此目的,这种GKTurnBasedMatchmakerViewControllerDelegate协议的方法似乎非常明智,但显然已弃用。

func turnBasedMatchmakerViewController(_ viewController: GKTurnBasedMatchmakerViewController, didFind match: GKTurnBasedMatch)

任何提示将不胜感激!

1 个答案:

答案 0 :(得分:0)

我同意,实现这一目标的委托功能非常有用。

为此,我的解决方案是在提供媒人视图控制器的委托中注册一个侦听器,我们称之为mainVC。 MainVC应符合GKLocalPlayerListener协议。

// In mainVC
GKLocalPlayer.localPlayer().registerListener(self)

然后,当播放器在标准界面中选择一个匹配项时,将调用以下功能,您必须在mainVC中实现该功能:

// in mainVC
func player(player: GKPlayer, receivedTurnEventForMatch match: GKTurnBasedMatch, didBecomeActive: Bool) {
  // Dismiss the turnBasedMatchmakerViewController standard interface
  // Load your match using the match object passed above
}

在此功能中,关闭与玩家匹配的标准界面,然后使用segue或其他方式加载游戏。

receivedTurnEventForMatch函数是使用发生的事件更新比赛的标准方法。在以下情况下被称为

  • 当前回合具有与之相关的超时,并且该回合为 即将到期。
  • 玩家接受其他玩家的邀请。
  • 转牌被转给另一位玩家。在这种情况下,didBecomeActive为false。
  • 比赛数据由其他玩家保存。
  • 玩家收到提醒。