我使用的是默认GKTurnBasedMatchmakerViewController
。玩家可以"删除"通过将匹配单元向左滑动然后点击红色来进行匹配"删除"按钮。但这并没有通知其他玩家第一个已经移除(并退出)该匹配。另一个继续等待另一名球员加入比赛并转弯。但这违背了我游戏的逻辑。我想在任何球员退出比赛或将其移除后立即结束比赛。
有没有办法接收任何类型的回调或为想要删除匹配的玩家设置matchOutcome
?
谢谢你的帮助。
答案 0 :(得分:0)
这一直是GKTurnBasedMatches
的弱点。匹配可以在游戏之外,通过匹配器制造商视图控制器和(在< = IOS9中)Game Center应用程序更新,经常创建不可恢复的场景。
Player swipe to remove match描述了使用同样的问题(但引用了现已删除的Game Center应用程序)作为漏洞来避免招致损失。我在那里发布了部分解决方案,类似的方法也有助于缓解你的情况:
loadMatchesWithCompletionHandler
以拉出本地玩家所知道的所有比赛。本地玩家在您的应用程序“外部”删除的匹配项将从服务器列表中(适当地)丢失。loadMatchWithID
加载特定匹配项。因此,对于每个“缺失”匹配,使用您在本地存储的matchID调用loadMatchWithID
,获取匹配对象,然后基于participantQuitInTurnWithOutcome
,participantQuitOutOfTurnWithOutcome
或declineInviteWithCompletionHandler
调用关于玩家在已删除的比赛中的状态。虽然不理想,只要“删除者”再次开始游戏,你就有机会评估所有游戏并强行从他们删除的比赛中彻底退出。调用participantQuit
函数中的任何一个都会向另一个玩家发送通知(和/或转弯)。