如何在玩家"删除" GKTurnBasedMatchmakerViewController正在进行的匹配

时间:2017-02-15 06:55:58

标签: ios swift gkturnbasedmatch

我使用的是默认GKTurnBasedMatchmakerViewController。玩家可以"删除"通过将匹配单元向左滑动然后点击红色来进行匹配"删除"按钮。但这并没有通知其他玩家第一个已经移除(并退出)该匹配。另一个继续等待另一名球员加入比赛并转弯。但这违背了我游戏的逻辑。我想在任何球员退出比赛或将其移除后立即结束比赛。 有没有办法接收任何类型的回调或为想要删除匹配的玩家设置matchOutcome? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

这一直是GKTurnBasedMatches的弱点。匹配可以在游戏之外,通过匹配器制造商视图控制器和(在< = IOS9中)Game Center应用程序更新,经常创建不可恢复的场景。

Player swipe to remove match描述了使用同样的问题(但引用了现已删除的Game Center应用程序)作为漏洞来避免招致损失。我在那里发布了部分解决方案,类似的方法也有助于缓解你的情况:

  1. 每当您收到邀请,加入比赛或创建比赛时,请在本地存储matchID。
  2. 当游戏开始时,请致电loadMatchesWithCompletionHandler以拉出本地玩家所知道的所有比赛。本地玩家在您的应用程序“外部”删除的匹配项将从服务器列表中(适当地)丢失。
  3. 即使他们从列表中删除了匹配项,他们仍然可以使用loadMatchWithID加载特定匹配项。因此,对于每个“缺失”匹配,使用您在本地存储的matchID调用loadMatchWithID,获取匹配对象,然后基于participantQuitInTurnWithOutcomeparticipantQuitOutOfTurnWithOutcomedeclineInviteWithCompletionHandler调用关于玩家在已删除的比赛中的状态。
  4. 退出/拒绝将发送通知和/或将转弯传递给其他玩家。
  5. 虽然不理想,只要“删除者”再次开始游戏,你就有机会评估所有游戏并强行从他们删除的比赛中彻底退出。调用participantQuit函数中的任何一个都会向另一个玩家发送通知(和/或转弯)。

    但是,如果“删除者”再也没有开始游戏,那么这项工作将无法奏效。在那种情况下,如果他们在一些设定的时间间隔后没有看到任何进展,那么所有其他玩家可以做的最终都是自己离开。