1

2D重力シミュレーションゲームを作成していて、保存/読み込み機能を追加しようとしています。ゲームでは、現在のすべての惑星を配列に格納します。各惑星は、惑星の座標、質量、および動きベクトルを含むBodyオブジェクトによって表されます。また、惑星の軌跡を画面に描画するために、惑星の最後の100座標の配列を格納します。

JSON.stringify()を使用して惑星配列をシリアル化したい。各惑星の最初の属性(質量、位置、動き)を保存したいのですが、最後の100座標(トレイル配列)を保存する必要はありません。座標を完全に削除したくありません。そうしないと、トレイルが画面から消えてしまいます。各オブジェクトの一部のみを文字列化できますか?そうでない場合は、エンコード後にJSON文字列のその部分を削除できますか?または、保存プロセス中に座標を別の場所に移動し、保存したら各惑星にコピーして戻す必要がありますか?

4

3 に答える 3

2

最新のWebブラウザーでは、を使用できますArray#map

var serialized = JSON.stringify(planets.map(function(planet){
  return { 
    mass: planet.mass,
    location: planet.location,
    motion: planet.motion
  };
}));

または、forループを使用した場合と同等です。

于 2013-01-06T00:25:07.520 に答える
0

この方法で試してください

var saved = JSON.stringify( {mass:body.mass,location:body.location,motion:body.motion} );

それはあなたにjson文字列としてちょうど3つの部分を与えるでしょう。

もう少し拡張すると、このようなエクスポート関数などのボディクラスを提供できます。例えば:

Bodyclass.export = function( toexport ) {
    if ( undefined === toexport || toexport.constructor != Array ) {
        var toexport = [ 'mass', 'location', 'motion' ];
    }
    var export = {};
    for ( var i = 0; i < toexport; i++) {
        export[ toexport[ i ] ] = this[ toexport[ i ] ];
    ]
}

var saved = JSON.stringify( body.export() );
于 2013-01-05T23:56:22.027 に答える
0

最良の方法は、シリアル化と逆シリアル化の両方の方法を作成することです。これにより、最も効率的なストレージ形式を作成しながら、必要と思われる数のオブジェクトを再構築できます。エクスポート/インポート、保存/復元、シリアル化/逆シリアル化の用語のいずれか適切と思われる方を使用できます。このような方法を使用すると、長期的にも保守性が向上します。

于 2013-01-06T00:18:53.177 に答える