GKTurnBasedMatch退出

时间:2012-05-02 11:44:37

标签: ios gamekit

当用户使用GameKit在iOS应用中基于回合制匹配“轮流”退出时,在GKTurnBasedMatchmakerViewController上调用委托方法-(void)turnBasedMatchmakerViewController: (GKTurnBasedMatchmakerViewController *)viewController playerQuitForMatch:(GKTurnBasedMatch *)match;,根据文档,我们应该设置结果当前玩家,并致电participantQuitInTurnWithOutcome:nextParticipant:matchData:completionHandler

但是,我无法找到关于球员退出的任何信息。那是在轮到我的时候,我退出了媒人视图控制器。似乎没有任何委托方法,并且令人惊讶的是,通过调试我的应用程序,我发现转弯已发送(即使现在不在我的回合中)。

任何人都可以解释一下这种行为以及处理轮次退出的正确方法。

3 个答案:

答案 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