是否可以通过 Game Center 向其他玩家发送文字聊天消息?他们有什么专门的方法可以用 GameKit API 做到这一点吗?还是只需要放入玩家之间发送的回合数据中?
3 回答
你必须自己写,游戏中心没有允许聊天的方法。
就像已经提出的那样,您可以使用GKTurnBasedMatch
's matchData
。如果您的游戏是回合制的,您可以有两种游戏数据消息类型:一种用于在每个玩家回合结束时发送游戏数据,另一种用于发送聊天消息。或者您可以将它们组合起来,以便在每个玩家结束回合时发送一条消息。但是,如果您只用于matchData
发送聊天消息,请确保它不会结束玩家的回合,否则您将遇到游戏同步问题。saveCurrentTurnWithMatchData:completionHandler:
用于发送您的消息的使用方法;另一方面,GameKit 会在收到消息时调用您的轮回回调 - 您应该阅读更新的matchData
并查看它是消息还是游戏状态更新——如果你使用 JSON 或 XML 或 NSDictionary 序列化来来回发送数据,这相对容易——你可以dataType
在那里引入类似属性的东西,让你区分文本消息和游戏状态更新。
还有一个更改match.message
内容的选项,但是如果您将短消息放在那里,对手只会在收到来自 GameCenter 的“轮到您”的通知时才能看到它。
您可以在游戏期间将文本作为普通数据发送。为了做到这一点
准备发送数据的方法
-(void)sendText:(NSString *) text {
NSString * text2Send = [NSString stringWithFormat:@"%@", text];
[self sendData:[text2Send dataUsingEncoding:NSUTF8StringEncoding]];
}
发送数据方法将是游戏中心的正常数据发送方法,如
- (BOOL)sendDataToAllPlayers:(NSData *)data withDataMode:(GKMatchSendDataMode)mode error:(NSError **)error;
并且为了解析接收到的数据
NSString * rawText = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSUTF8StringEncoding];
if(rawText.length > 0)
{
//Do what ever you want with the text
}