首页 > 解决方案 > 从 GKTurnBasedMatchMakerViewController 检索 GKTurnBasedMatch 对象 - Swift 4

问题描述

我正在尝试实现基于回合的多人游戏(2 人战略棋盘游戏)。我已经成功地验证了本地播放器并展示了 GKTurnBasedMatchmakerViewController(标准接口)。

我对如何检索玩家选择的 GKTurnBasedMatch 对象(如果可用)感到有些困惑。GKTurnBasedMatchmakerViewControllerDelegate 协议的这种方法似乎非常适合此目的,但显然它已被弃用。

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

任何提示将不胜感激!

标签: swiftgame-centergkturnbasedmatch

解决方案


我同意,实现这一点的委托功能很有用。

我的解决方案是在呈现媒人视图控制器的委托中注册一个侦听器,我们称之为 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 为假。
  • 比赛数据由另一名球员保存。
  • 玩家收到提醒。

推荐阅读