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: 最初のプレイヤーが終了し、2 番目のプレイヤーが試合を終了したため、2 人のプレイヤーはイベントを受け取らないと思います。このイベントは、おそらくゲーム内の他のプレイヤーのために、または他のプレイヤーが離れたときにプレイヤーがアプリ内にいないときに作成されます。ドキュメントに関連するものは見つかりませんでしたが、論理的だと思われます。

シリル

4

0 に答える 0