swift - 从 GKTurnBasedMatchMakerViewController 检索 GKTurnBasedMatch 对象 - Swift 4
问题描述
我正在尝试实现基于回合的多人游戏(2 人战略棋盘游戏)。我已经成功地验证了本地播放器并展示了 GKTurnBasedMatchmakerViewController(标准接口)。
我对如何检索玩家选择的 GKTurnBasedMatch 对象(如果可用)感到有些困惑。GKTurnBasedMatchmakerViewControllerDelegate 协议的这种方法似乎非常适合此目的,但显然它已被弃用。
func turnBasedMatchmakerViewController(_ viewController: GKTurnBasedMatchmakerViewController, didFind match: GKTurnBasedMatch)
任何提示将不胜感激!
解决方案
我同意,实现这一点的委托功能很有用。
我的解决方案是在呈现媒人视图控制器的委托中注册一个侦听器,我们称之为 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 为假。
- 比赛数据由另一名球员保存。
- 玩家收到提醒。
推荐阅读
- c# - 防止设备通信中的瓶颈
- python-3.x - 获取匹配子目录名称中的所有文件
- angular - 从 Angular 2+ 中的组件翻译文本
- android - 是否可以完全禁用打盹模式和待机模式?
- r - R中的索引列名称
- outlook - Microsoft Flow 连接问题 Trello 与 Microsoft To Do/Outlook 任务
- r - 将数据表放入 shinyjs 模式
- html - 按下输入按钮(类型=文件)后,通过纯 CSS/HTML 永久更改视觉效果
- visual-studio - 在 VS 3D 渲染器中打开 .obj 文件
- web - 在 Raspberry Pi 上嵌入 (Youtube/Vimeo) 视频