1

是否可以通过 Game Center 向其他玩家发送文字聊天消息?他们有什么专门的方法可以用 GameKit API 做到这一点吗?还是只需要放入玩家之间发送的回合数据中?

4

3 回答 3

2

你必须自己写,游戏中心没有允许聊天的方法。

于 2012-09-26T14:12:25.400 回答
1

就像已经提出的那样,您可以使用GKTurnBasedMatch's matchData。如果您的游戏是回合制的,您可以有两种游戏数据消息类型:一种用于在每个玩家回合结束时发送游戏数据,另一种用于发送聊天消息。或者您可以将它们组合起来,以便在每个玩家结束回合时发送一条消息。但是,如果您只用于matchData发送聊天消息,请确保它不会结束玩家的回合,否则您将遇到游戏同步问题。saveCurrentTurnWithMatchData:completionHandler:用于发送您的消息的使用方法;另一方面,GameKit 会在收到消息时调用您的轮回回调 - 您应该阅读更新的matchData并查看它是消息还是游戏状态更新——如果你使用 JSON 或 XML 或 NSDictionary 序列化来来回发送数据,这相对容易——你可以dataType在那里引入类似属性的东西,让你区分文本消息和游戏状态更新。

还有一个更改match.message内容的选项,但是如果您将短消息放在那里,对手只会在收到来自 GameCenter 的“轮到您”的通知时才能看到它。

于 2013-05-24T10:09:54.963 回答
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
}
于 2013-04-27T01:19:17.330 回答