2

我正在使用GameKitGKTurnBased API 编写一个简单的 2 人棋盘游戏,我的问题是在我的游戏结束时,我想检测一个玩家赢了另一个输了。

首先,handleTurnEventForMatch:didBecomeActive:方法被触发,在这个方法中,我检查了其他参与者的状态:

// Test other players status
    for(GKTurnBasedParticipant *participant in match.participants)
    {
        if([participant.playerID isEqualToString:[GKLocalPlayer localPlayer].playerID])
            continue;

        if(participant.matchOutcome == GKTurnBasedMatchOutcomeQuit || participant.matchOutcome == GKTurnBasedMatchOutcomeLost)
        {
            [self findMeInMatch:match].matchOutcome = GKTurnBasedMatchOutcomeWon;
            [match endMatchInTurnWithMatchData:match.matchData
                             completionHandler:nil];
            return;
        }
        else if(participant.matchOutcome == GKTurnBasedMatchOutcomeWon)
        {
            [self findMeInMatch:match].matchOutcome = GKTurnBasedMatchOutcomeLost;
            [match endMatchInTurnWithMatchData:match.matchData
                             completionHandler:nil];
            return;
        }
        else if(participant.matchOutcome == GKTurnBasedMatchOutcomeTied)
        {
            [self findMeInMatch:match].matchOutcome = GKTurnBasedMatchOutcomeTied;
            [match endMatchInTurnWithMatchData:match.matchData
                             completionHandler:nil];
            return;
        }
        else
        {
            // OK
        }
    }
[...]

我现在的问题是永远不会调用handleMatchEnded:方法......奇怪的是,这个方法是与handleTurnEventForMatch:didBecomeActive:相同的委托协议的一部分,它实际上是有效的。

欢迎任何想法。

干杯。

03/17 更新: 由于我的第一个玩家退出是轮到的,而第二个玩家结束了比赛,我认为这两个玩家不会收到该事件。此事件可能是为游戏中的其他玩家制作的,或者当其他玩家离开时玩家不在应用程序内时。在文档中没有找到任何相关的内容,但它似乎是合乎逻辑的。

西里尔

4

0 回答 0