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