Ios 我怎样才能叫“我的朋友”;ParticipantQuitOutofTurnWithOutput:withCompletionHandler:“;?

Ios 我怎样才能叫“我的朋友”;ParticipantQuitOutofTurnWithOutput:withCompletionHandler:“;?,ios,game-center,Ios,Game Center,我有一个回合制的游戏,当有人不按顺序从游戏中心罚球时,我试图结束游戏。我不知道当不在轮换的玩家按下“没收”按钮时,该怎么称呼。我要实施, participantQuitOutOfTurnWithOutcome:withCompletionHandler: 但我不知道该把它放在哪里,给它打电话。我试着把它放在这里: -(void)handleTurnEventForMatch:(GKTurnBasedMatch *)match 及 但当一个玩家不按顺序按下“没收”按钮时,这两个选项似乎都不会被

我有一个回合制的游戏,当有人不按顺序从游戏中心罚球时,我试图结束游戏。我不知道当不在轮换的玩家按下“没收”按钮时,该怎么称呼。我要实施,

participantQuitOutOfTurnWithOutcome:withCompletionHandler:
但我不知道该把它放在哪里,给它打电话。我试着把它放在这里:

-(void)handleTurnEventForMatch:(GKTurnBasedMatch *)match


但当一个玩家不按顺序按下“没收”按钮时,这两个选项似乎都不会被调用。我遗漏了什么?

每当您确定用户想要没收时,您都需要呼叫参与者退出,结果是:withCompletionHandler:,因此在您的情况下,当他们点击没收按钮时(可能在确认时点击“是”)

在这种情况下,您将需要以下内容:

-(void)playerChoseToForfeit {
    [self.match participantQuitOutOfTurnWithOutcome:GKTurnBasedMatchOutcomeQuit withCompletionHandler:^(NSError *error) {
        //tell the user that they've forfeited (or not, if there's an error!)
    }];

}

基本上,这将是你自己的方法,而不是(一定)代表方法。

在你提出这个问题五年后,苹果仍然没有更新
GKLocalPlayerListener
协议来处理这种情况。我还试图完全依赖Game Center MatchMaker视图控制器(GC MMVC),我遇到了与您相同的问题,如果用户在轮到他们时通过
GC MMVC
放弃,那么比赛将处于冲突状态:退出者“完成”,其余玩家“活动”

我通过检查调用
match.loadMatchData
后不按顺序退出的对手的
matchoutput
,发现对手的结果设置为
。quit

游戏中心将退出者的状态设置为
.quit
,但将游戏保持活动状态并将
currentParticipant
设置为下一个玩家的原因是针对两个以上玩家的游戏。由于我的游戏只有两人参与,我不明白为什么没有调用
player(wantsToQuitMatch:)

因此,每次调用
loadMatchData
,都应该检查所有其他玩家的
matchOutcome
,并立即采取适当的行动。在我的例子中,我将退出者的结果设置为
.lost
,将
localParticipant
的结果设置为
.won
,然后使用更新的匹配数据调用
match.endmatcheinturn
。然后,我将显示加载到
localParticipant
的匹配,并显示一条消息,说明其他玩家退出


如果你不调用
match.endmatcheinturn
,那么剩下的玩家将被挂起一场活跃的比赛,但没有活跃的对手

@username\u tbd我遇到的问题是,没收按钮不是我的视图控制器的一部分,而是游戏中心配对视图控制器的一部分,所以我不知道当他们按下它时会调用什么。如果轮到他们自己,则调用playerQuitForMatch,但不轮到他们时不调用它。
-(void)playerChoseToForfeit {
    [self.match participantQuitOutOfTurnWithOutcome:GKTurnBasedMatchOutcomeQuit withCompletionHandler:^(NSError *error) {
        //tell the user that they've forfeited (or not, if there's an error!)
    }];

}