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