我正在使用默认的GKTurnBasedMatchmakerViewController
. 玩家可以通过向左滑动匹配单元格然后点击红色的“删除”按钮来“删除”正在进行的匹配。但这不会通知其他玩家第一个玩家已经移除(并退出)比赛。另一个继续等待另一名玩家加入比赛并转弯。但这违背了我的游戏逻辑。我想在任何玩家退出比赛或移除比赛后立即结束比赛。有没有办法为matchOutcome
想要删除比赛的玩家接收任何类型的回调或设置?感谢帮助。
问问题
71 次
1 回答
0
长期以来,这一直是GKTurnBasedMatches
. 比赛可能会在您的游戏之外通过比赛制作器视图控制器和(在 <= IOS9 中)Game Center 应用程序进行更新,经常会创建不可恢复的场景。
Player swipe to remove match描述了使用相同的问题(但引用了现已删除的 Game Center 应用程序)作为利用以避免造成损失。我在那里发布了部分解决方法,类似的方法也将有助于缓解您的情况:
- 每当您收到邀请、加入比赛或创建比赛时,请将 matchID 存储在本地。
- 游戏开始时,调用
loadMatchesWithCompletionHandler
拉取本地玩家知道的所有比赛。本地玩家在您的应用程序“外部”删除的匹配项将(适当地)从服务器列表中丢失。 - 即使他们从列表中删除了匹配项,他们仍然可以使用
loadMatchWithID
. 因此,对于每个“丢失”的比赛,loadMatchWithID
使用您在本地存储的 matchID 调用,获取比赛对象,然后根据已删除比赛中玩家的状态调用participantQuitInTurnWithOutcome
、participantQuitOutOfTurnWithOutcome
或。declineInviteWithCompletionHandler
- 退出/拒绝将发送通知和/或将轮到其他玩家。
虽然不理想,但只要“删除者”重新开始游戏,您就有机会评估所有游戏并强制退出他们删除的匹配项。调用其中任何一个participantQuit
函数都会向其他玩家发送通知(和/或传递回合)。
但是,如果“删除器”不再启动游戏,则此解决方法将不起作用。在这种情况下,如果其他玩家在设定的时间间隔后没有看到任何进展,他们所能做的就是最终自己离开比赛。
于 2017-02-16T00:19:14.950 回答