当用户使用GameKit在iOS应用中基于回合制匹配“轮流”退出时,在GKTurnBasedMatchmakerViewController上调用委托方法-(void)turnBasedMatchmakerViewController: (GKTurnBasedMatchmakerViewController *)viewController playerQuitForMatch:(GKTurnBasedMatch *)match;
,根据文档,我们应该设置结果当前玩家,并致电participantQuitInTurnWithOutcome:nextParticipant:matchData:completionHandler
:
但是,我无法找到关于球员退出的任何信息。那是在轮到我的时候,我退出了媒人视图控制器。似乎没有任何委托方法,并且令人惊讶的是,通过调试我的应用程序,我发现转弯已发送(即使现在不在我的回合中)。
任何人都可以解释一下这种行为以及处理轮次退出的正确方法。
答案 0 :(得分:2)
您可以在
中处理此方案-(void)handleTurnEventForMatch:(GKTurnBasedMatch *)match
循环参与者,如果触发玩家是本地玩家,并且他的结果是“退出”,并且他不是当前参与者(在另一个地方处理--turnBasedMatchmakerViewController:playerQuitForMatch :),那么继续并退出游戏不合时宜。
for (int i = 0; i < [match.participants count]; i++)
{
GKTurnBasedParticipant *p = [match.participants objectAtIndex:i];
if ([p.playerID isEqualToString:[GKLocalPlayer localPlayer].playerID])
{
// Found player
if (p.matchOutcome == GKTurnBasedMatchOutcomeQuit)
{
// Player Quit... ignore current participants and end out of turn only for the other player
if (![match.currentParticipant.playerID isEqualToString:p.playerID])
{
// not the current participant and he quit
[match participantQuitOutOfTurnWithOutcome:GKTurnBasedMatchOutcomeQuit withCompletionHandler:nil];
break;
}
}
}
}
答案 1 :(得分:0)
您可以检查匹配中的当前参与者,看看是否是您。至于发送的流量,游戏中心是否需要通知所有其他玩家您已退出?
答案 2 :(得分:-1)
实际上有一种方法可以退出:
对于GKTurnBasedMatch,它被称为:
participantQuitOutOfTurnWithOutcome:withCompletionHandler:
当调用turnBasedMatchmakerViewController:playerQuitForMatch:函数时,可以在GKTurnBaseMatchMakerViewControllerDelegate中调用它。
请参阅官方文档here