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!)
}];
}