我想知道当游戏会话正在进行并且我们无法将我们的数据传达给其他玩家时,如何获得本地玩家的断开消息。由于文档中没有任何内容说“只要您的连接失败,此方法就会通知您”,我有点不知所措。
我试图使用这段代码,希望它能起作用,但它是徒劳的。“我们已断开连接”。消息永远不会被触发。
- (void)match:(GKMatch *)theMatch player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state {
if (self.match != theMatch) return;
switch (state) {
case GKPlayerStateDisconnected:
//disconnected
NSLog(@"player status changed: disconnected");
matchStarted = NO;
GKLocalPlayer *player = [GKLocalPlayer localPlayer];
if ([playerID isEqualToString:player.playerID]) {
// We have been disconnected
NSLog(@"We're disconnected.");
}
if ([delegate respondsToSelector:@selector(matchEnded)]) {
[delegate matchEnded];
}
break;
}
}
我发现的唯一另一条线可能会告诉我们我们无法通信是当我们实际发送这样的数据时:
- (void)sendRandomMatchData:(NSData *)data {
GKMatch *match = [GCHelper sharedInstance].match;
BOOL success = [match sendDataToAllPlayers:data
withDataMode:GKMatchSendDataReliable
error:nil];
if (!success) {
[self matchEnded];
}
}
但是我假设如果对手断开连接并且我们无法向他们发送消息,那么“成功”也将是错误的。
我有一个非常严格的游戏逻辑,如果有人掉线了,我需要通知他们他们无法继续比赛并且他们已经输了。
非常感谢任何帮助。