2

私は GKTurnBasedMatch を初めて使用し、ターン中にプレイヤー間で送信される「matchData」の適切な方法を理解しようとしています。私が見つけたすべてのチュートリアルは、主にテキスト文字列の送信をカバーしており、それ以上のものを送信したいと考えています。誰かが私をより高度なチュートリアルに連れて行ってくれるとうれしいです.

私がやりたいことの例は戦いです。2 人のプレイヤーにはアバターがあり、詳細 (ヘルス、攻撃、防御など) が異なります。このデータはどのように送信すればよいですか? 私が可能な唯一の方法は、すべての一致の詳細 (それらの多く) を NSDictionary に体系化し、それを送信して、それらをカスタム一致オブジェクトに再度配置できるようにすることです。NSCoding を実装する必要がありますか?

ありがとうございました!

4

1 に答える 1

6

1 回のターンに必要なすべての関連情報を格納するクラスを実装し、そのクラスに 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];

Archives and Serializations Programming Guideも優れた出発点です。

もう 1 つのオプションは、RestKit のようなライブラリを使用することです。これは、JSON または XML との間のオブジェクト マッピングです。

于 2012-08-24T06:41:52.357 に答える