0

正直なところ、この質問をどこから始めればよいのかよくわかりません。状況を説明します。HTML5ゲームのレベルエディターを作成中です。レベルエディタはすでに機能しています-ここで、このエディタで作成されたレベルを保存/ロードしたいと思います。

これはすべてJavascript(レベルエディターとゲーム)で行われているので、保存でレベルをJSONに変換し、ロードすることを考えていました。

問題は、レベルにいくつかのタイプのオブジェクト(いくつかの異なるタイプのエンティティ、いくつかのタイプのアニメーションオブジェクトなど)が含まれていることです。現在、ゲームにオブジェクトを追加するたびに、unjsonifyメソッドを作成する必要があります。特にそのオブジェクトに対して、レベルオブジェクトのunjsonifyメソッドを変更して、新しく定義されたタイプのオブジェクトのunjsonizingを処理できるようにします。

JSON.parseは、元のオブジェクトと同じキーと値を持つオブジェクトを返すだけなので、単純に使用することはできませんが、実際にはそのクラス/プロトタイプのオブジェクトではありません。私の質問は、新しいタイプのオブジェクトをゲームに追加するたびにコードを継続的に変更する必要がない、これを行う正しい方法はありますか?

4

1 に答える 1

0

各オブジェクトにシリアル化/逆シリアル化メソッドを作成して、状態を JSON オブジェクトに入れ、それらから復元します。複合オブジェクトは、子を再帰的にシリアライズ/デシリアライズします。例を挙げると:

function Player {
  this.weapon = new Weapon();
}

Player.prototype.serialise = function () {
  return {'type': 'Player', weapon: this.weapon.serialise()};
}

Player.deserialise = function(json_object) {
  var player = new Player();
  player.weapon = Weapon.deserialise(json.weapon);
  return player;
}

明らかに、実際のコードでは、期待するタイプのオブジェクトを取得していることを確認するためのチェックが必要です。配列と単純なハッシュ オブジェクトは、シリアライゼーション/デシリアライゼーション中に単純にコピーできますが、多くの場合、それらの子は再帰する必要があります。

于 2012-08-06T09:37:59.980 に答える