我是GKTurnBasedMatch的新手,我想弄清楚在回合中玩家之间发送的“matchData”有哪些好的做法。我发现的所有教程主要涉及发送文本字符串,我想发送的内容远不止于此。如果有人可以将我推荐给更高级的教程,那就太好了。

我想做的一个例子是战斗。这两个玩家都有自己的化身,并且具有不同的详细信息(健康,攻击,防御等),我该如何发送这些数据?我认为唯一可行的方法是将所有匹配项详细信息(很多)都编入NSDictionary,然后发送给NSDictionary,以便可以将它们再次放回到自定义匹配对象中。我应该实施NSCoding吗?

谢谢!

最佳答案

我将实现一个类,该类存储单个转弯所需的所有相关信息,并让该类实现NSCoding。这意味着您可以在一个播放器的设备上将对象转换为NSData,然后在另一侧将其转换回对象。

这个网站http://samsoff.es/posts/archiving-objective-c-objects-with-nscoding有一个简单的示例可以帮助您入门,这里是您需要的主要方法的示例:

- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super init]) {
        self.health = [decoder decodeObjectForKey:@"health"];
        self.attack = [decoder decodeObjectForKey:@"attack"];
        isDead = [decoder decodeBoolForKey:@"isDead"];
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:self.health forKey:@"health"];
    [encoder encodeObject:self.attack forKey:@"attack"];
    [encoder encodeBool:isDead forKey:@"isDead"];
 }

将您的对象编码为NSData:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject: object];

转换回一个对象:
id *object = [NSKeyedUnarchiver unarchiveObjectWithData: inputData];

The Archives and Serializations Programming Guide也是一个很好的起点。

另一个选择是使用像RestKit这样的库,它是到JSON或XML的对象映射。

关于ios - Game Center matchData的良好做法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12104041/

10-12 14:32