使用Game Center将文本聊天消息发送给其他玩家?

时间:2012-09-26 14:06:29

标签: ios game-center gamekit

是否可以通过游戏中心向其他玩家发送文字聊天消息?他们用GameKit API做任何专门的方式吗?还是只需要将其放入玩家之间发送的转弯数据中?

3 个答案:

答案 0 :(得分:2)

你必须自己编写,游戏中心没有方法可以聊天。

答案 1 :(得分:1)

您可以在游戏过程中将文本作为普通数据发送。为了做到这一点

准备发送数据的方法

-(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
}

答案 2 :(得分:0)

与已提议的内容一样,您可以使用GKTurnBasedMatch的{​​{1}}。如果您的游戏是回合制的,您可以拥有两种游戏数据消息类型:一种用于在每个玩家回合结束时发送游戏数据,另一种用于发送聊天消息。或者您可以将它们组合在一起,以便在每个玩家结束轮到时发送消息。但是,如果您只使用matchData发送聊天消息,请确保它不会终止播放器,否则您将遇到游戏同步问题。使用matchData方法发送消息;在另一方面,GameKit会在收到消息时调用你的回调 - 你应该阅读更新的saveCurrentTurnWithMatchData:completionHandler:并查看它是消息还是游戏状态更新 - 如果你使用JSON或XML或NSDictionary,这相对容易用于来回发送数据的序列化 - 您可以在其中引入类似matchData属性的内容,以便您区分文本消息和游戏状态更新。

还可以选择更改dataType内容,但是如果你在那里发短信,对手只会在收到GameCenter的“轮到你”通知后才能看到它。