我有一个基于回合的游戏,并且当有人从游戏中心放弃时,我试图结束游戏。当玩家反过来实际按下“没收”按钮时,我无法弄清楚所谓的内容。我想实施,
participantQuitOutOfTurnWithOutcome:withCompletionHandler:
但不知道把它放在哪里并称之为。我试着把它放在这里:
-(void)handleTurnEventForMatch:(GKTurnBasedMatch *)match
和
- (void)turnBasedMatchmakerViewController:(GKTurnBasedMatchmakerViewController *)viewController playerQuitForMatch:(GKTurnBasedMatch *)match
但是当玩家按下“没收”按钮时似乎都没有被调用。我错过了什么?
答案 0 :(得分:0)
当您确定用户想要放弃时,您会想要拨打participantQuitOutOfTurnWithOutcome:withCompletionHandler:
- 所以在您的情况下,当他们点击没收按钮时(可能在点击“是”'之后)确认)。
在这种情况下,你会想要这样的东西:
-(void)playerChoseToForfeit {
[self.match participantQuitOutOfTurnWithOutcome:GKTurnBasedMatchOutcomeQuit withCompletionHandler:^(NSError *error) {
//tell the user that they've forfeited (or not, if there's an error!)
}];
}
基本上,它将采用您自己的方法 - 而不是(必然)是代表方法。
答案 1 :(得分:0)
问了这个问题五年后,Apple仍未更新GKLocalPlayerListener
协议来处理这种情况。我也尝试仅依靠Game Center MatchMaker视图控制器(GC MMVC),遇到了与您遇到的相同问题,如果用户不在轮到GC MMVC
的情况下,则{比赛处于冲突状态:退出者“完成”,其余玩家“活跃”。
我通过检查在致电matchOutcome
后退出的对手的match.loadMatchData
发现,对手的结果被设置为.quit
。
Game Center将退出者的状态设置为.quit
但保持游戏活动并将currentParticipant
设置为下一个玩家的原因是用于具有两个以上玩家的游戏。由于我的游戏是两人游戏,所以我不明白为什么没有player(wantsToQuitMatch:)
被调用。
因此,每次您呼叫loadMatchData
时,都应检查所有其他玩家的matchOutcome
并立即采取适当措施。就我而言,我将退出者的结果设置为.lost
,将localParticipant
的结果设置为.won
,然后使用更新的匹配数据调用match.endMatchInTurn
。然后,我将显示已加载的对localParticipant
的比赛,并显示一条消息,提示其他玩家退出。
如果您不打match.endMatchInTurn
,则剩余的玩家将与一场有效的比赛一起悬而未决,而没有活跃的对手。