如何在玩家 "Remove" 从 GKTurnBasedMatchmakerViewController 进行比赛时收到通知
How to get notified when a player "Remove" a match in progress from GKTurnBasedMatchmakerViewController
我正在使用默认 GKTurnBasedMatchmakerViewController
。玩家可以通过向左滑动匹配单元格然后点击红色 "Remove" 按钮来 "Remove" 正在进行的匹配。但这并没有通知其他玩家第一个玩家已经移除(并退出)了比赛。另一个继续等待另一个玩家加入比赛并转弯。但这违背了我的游戏逻辑。我想在任何玩家退出比赛或移除比赛后立即结束比赛。
有什么方法可以接收任何类型的回调或为想要删除比赛的玩家设置 matchOutcome
吗?
感谢您的帮助。
这一直是 GKTurnBasedMatches
的弱点。比赛可能会在您的游戏之外更新,通过比赛制作者视图控制器和(在 <= IOS9 中)Game Center 应用程序,经常创建不可恢复的场景。
描述了使用相同的问题(但引用了 now-removed Game Center 应用程序)作为避免蒙受损失的漏洞。我在那里发布了部分 work-around,类似的方法也将有助于缓解您的情况:
- 每当您收到邀请、加入比赛或创建比赛时,将比赛 ID 存储在本地。
- 游戏开始时,调用
loadMatchesWithCompletionHandler
拉取本地玩家知道的所有匹配。本地播放器删除的匹配项 "outside" 您的应用程序将(适当地)从服务器列表中丢失。
- 即使他们从列表中删除了匹配项,他们仍然可以使用
loadMatchWithID
加载特定匹配项。因此,对于每个 "missing" 匹配项,使用您在本地存储的匹配 ID 调用 loadMatchWithID
,获取匹配对象,然后调用 participantQuitInTurnWithOutcome
、participantQuitOutOfTurnWithOutcome
或 declineInviteWithCompletionHandler
根据玩家在删除的比赛中的状态。
- 退出/拒绝会发送通知and/or将回合交给其他玩家。
虽然不理想,但只要"deleter"重新开始游戏,你就有机会评估所有的游戏,并强制从他们删除的游戏中干净退出。调用任一 participantQuit
函数都会向另一位玩家发送通知(and/or 通过回合)。
但是,如果 "deleter" 再也没有启动游戏,则此解决方法将不起作用。在那种情况下,如果其他玩家在设定的时间间隔后没有看到任何进展,那么他们所能做的就是最终自己离开比赛。
我正在使用默认 GKTurnBasedMatchmakerViewController
。玩家可以通过向左滑动匹配单元格然后点击红色 "Remove" 按钮来 "Remove" 正在进行的匹配。但这并没有通知其他玩家第一个玩家已经移除(并退出)了比赛。另一个继续等待另一个玩家加入比赛并转弯。但这违背了我的游戏逻辑。我想在任何玩家退出比赛或移除比赛后立即结束比赛。
有什么方法可以接收任何类型的回调或为想要删除比赛的玩家设置 matchOutcome
吗?
感谢您的帮助。
这一直是 GKTurnBasedMatches
的弱点。比赛可能会在您的游戏之外更新,通过比赛制作者视图控制器和(在 <= IOS9 中)Game Center 应用程序,经常创建不可恢复的场景。
- 每当您收到邀请、加入比赛或创建比赛时,将比赛 ID 存储在本地。
- 游戏开始时,调用
loadMatchesWithCompletionHandler
拉取本地玩家知道的所有匹配。本地播放器删除的匹配项 "outside" 您的应用程序将(适当地)从服务器列表中丢失。 - 即使他们从列表中删除了匹配项,他们仍然可以使用
loadMatchWithID
加载特定匹配项。因此,对于每个 "missing" 匹配项,使用您在本地存储的匹配 ID 调用loadMatchWithID
,获取匹配对象,然后调用participantQuitInTurnWithOutcome
、participantQuitOutOfTurnWithOutcome
或declineInviteWithCompletionHandler
根据玩家在删除的比赛中的状态。 - 退出/拒绝会发送通知and/or将回合交给其他玩家。
虽然不理想,但只要"deleter"重新开始游戏,你就有机会评估所有的游戏,并强制从他们删除的游戏中干净退出。调用任一 participantQuit
函数都会向另一位玩家发送通知(and/or 通过回合)。
但是,如果 "deleter" 再也没有启动游戏,则此解决方法将不起作用。在那种情况下,如果其他玩家在设定的时间间隔后没有看到任何进展,那么他们所能做的就是最终自己离开比赛。