4

当用户在使用 GameKit 的 iOS 应用程序中的回合制比赛中“轮流”退出时,会-(void)turnBasedMatchmakerViewController: (GKTurnBasedMatchmakerViewController *)viewController playerQuitForMatch:(GKTurnBasedMatch *)match;在 GKTurnBasedMatchmakerViewController 上调用委托方法,根据文档,我们应该为当前玩家设置结果,然后调用participantQuitInTurnWithOutcome:nextParticipant:matchData:completionHandler

但是,我无法找到有关玩家不按顺序退出的任何信息。那是轮不到我的时候,我退出了媒人视图控制器。似乎没有任何委托方法,并且令人惊讶的是,通过调试我的应用程序,我发现轮到发送(即使当前不是我轮到我参加比赛)。

谁能解释一下这种行为以及处理不正常退出的正确方法。

4

3 回答 3

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;
            }               
        }
    }
}
于 2012-07-08T21:24:26.320 回答
0

您可以检查比赛中的当前参与者,看看是否是您。至于发送的流量,游戏中心不需要通知所有其他玩家你已经退出了吗?

于 2012-06-01T08:45:36.890 回答
-1

其实有一种方法可以不按顺序退出:

对于 GKTurnBasedMatch,它被称为:

participantQuitOutOfTurnWithOutcome:withCompletionHandler:

您可以在调用 turnBasedMatchmakerViewController:playerQuitForMatch: 函数时在 GKTurnBaseMatchMakerViewControllerDelegate 中调用它。

请在此处查看官方文档

于 2012-06-08T03:42:35.627 回答