1

HTML5 キャンバスに描画する Javascript ゲームがあるとします。このゲームは、一連のオブジェクトの更新と描画をループします。ゲームの現在の状態を保存するための最良の方法は何ですか? すべてのオブジェクトをループして、すべての値をテキスト形式で書き込み、読み込み関数で読み取ることができると思いますが、それは私とゲームの両方にとって非常に多くの作業のように思えます。ファイルサイズ。これを行うより良い方法はありますか?私は前にそのようなことをしたことがないので、どこから始めればいいのか本当にわかりません.

ありがとう。

4

2 に答える 2

2

このようなものの標準的な方法は、システムを表すデータモデルと、モデルを表すビューを維持することです。モデルはほとんどがデータである必要があり、比較的複雑になる可能性がありますが、ビューのレンダリングに必要なすべての情報が含まれています。

このモデルがオブジェクトツリーであると仮定すると、呼び出しvar serialized = JSON.stringify(model)てデータモデルを文字列にシリアル化し、var model = JSON.parse(serialized)それを元に戻すことができます。これは非常に単純ですが、柔軟性のないアプローチですが、それは始まりです。

この情報を保存する簡単な方法はをlocalStorage使用することですが、このデータをどこからでも取得できるように、RESTサービス(またはそのようなもの)に値を設定するバックエンドストレージに移動することをお勧めします。

モデルをビューから分離するのに役立ち、データストアからデータを永続化/ハイドレイトするのに役立つBackbone.jsなどのMVCのようなフレームワークを調べることをお勧めします。

于 2013-02-24T04:04:49.407 に答える
1

'serialize'と'unserialize'のキーワードについて調査する必要があります。

すべてのオブジェクトで再帰ループを実行する代わりに、すべてのゲームオブジェクトにシリアル化の関数を実装させることをお勧めします。JSONを使用して、オブジェクトツリー全体を構築できます。各オブジェクトは、保持する必要のあるプロパティと、残りのプロパティから派生できるプロパティを決定します。これはいくつかのレベルで再帰ループと同じことをするように見えますが、大きな違いは、各オブジェクトがそれ自体とその内容をシリアル化/非シリアル化する方法を独自に定義できることです。

ゲームの状態をどれだけ正確に保存したいかに応じて、その方法で大量のデータを減らすことができます。たとえば、単に現在のレベルの先頭にリセットしたり、他の場所で利用できるデータをダンプしたりできます(たとえば、レベルデータは保存ファイルに保存しないでください。ゲームの状態に関する情報のみを保存する必要があります)。これにより、既存のレベルデータストアを使用してレベルを再現できます)。

于 2013-02-24T04:05:02.783 に答える