我如何调用" participantQuitOutOfTurnWithOutcome:withCompletionHandler:"?

时间:2014-06-04 17:52:19

标签: ios game-center

我有一个基于回合的游戏,并且当有人从游戏中心放弃时,我试图结束游戏。当玩家反过来实际按下“没收”按钮时,我无法弄清楚所谓的内容。我想实施,

participantQuitOutOfTurnWithOutcome:withCompletionHandler:

但不知道把它放在哪里并称之为。我试着把它放在这里:

-(void)handleTurnEventForMatch:(GKTurnBasedMatch *)match

- (void)turnBasedMatchmakerViewController:(GKTurnBasedMatchmakerViewController *)viewController playerQuitForMatch:(GKTurnBasedMatch *)match

但是当玩家按下“没收”按钮时似乎都没有被调用。我错过了什么?

2 个答案:

答案 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,则剩余的玩家将与一场有效的比赛一起悬而未决,而没有活跃的对手。