Game Center matchData的良好做法

时间:2012-08-24 06:14:20

标签: ios nsdata game-center gamekit nscoding

我是GKTurnBasedMatch的新手,我想弄清楚在转弯期间玩家之间发送的“matchData”有什么好方法。我发现的所有教程主要包括发送一串文本,我想发送更多。如果有人能给我一个更高级的教程,那就太棒了。

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

谢谢!

1 个答案:

答案 0 :(得分:6)

我会实现一个类,它存储单个转弯所需的所有相关信息,并让类实现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。