0

私の質問はlocalStorage、ページへの使用に関するものです。私は JavaScript でゲームを作っていますが、非常に時間がかかるため、ゲームが完了する前に誤ってタブを閉じたり、コンピューターをシャットダウンしたりすることが多すぎるという問題がありました。したがって、そのようなイベントによってゲーム全体がリセットされないように、ある種の簡単なゲーム保存手順を考えたいと思っています。

格納する必要があるデータは、3 つの配列と 1 つのプリミティブ値で構成されています。これらはそれぞれ、ユーザーがゲームのプレイを開始したときに作成され、ゲームがプレイされると、オブジェクトが配列に追加され、プリミティブ値 (整数) がインクリメントされます。整数値は難しくありませんが、配列はプリミティブ値ではなくオブジェクトで構成されているためJSON.stringify、文字通り"[object Object, object Object, object Object (...)]"文字列としてのみ返されます。

配列を繰り返し処理し、各オブジェクトを個別に文字列化しようとしましたが、それはちょっと複雑に思えます.

なんらかの理由で誰かが見たい場合は、これまでのプログラムの関連部分を次に示します。

var frogarray = [parent1, parent2, parent3, parent4]
var nestarray = [nest1]
var genesisarray = [];
pushGenesis( new Genesis() );
var boondollars = 0;

function getProgress () {
    var frogdata = localStorage.getItem("frogs");
    var nestdata = localStorage.getItem("nests");
    var boondata = localStorage.getItem("boondollars");
    var genesisdata = localStorage.getItem("genesis");
    frogarray = JSON.parse( frogdata );
    nestarray = JSON.parse( nestdata );
    genesisarray = JSON.parse( genesisdata );
    boondollars = boondata;
    frogtoUI();
    nesttoUI();
    printboons();
}

function saveProgress() {
    var storagefrog = [];
    var storagenest = [];
    var storagegenesis = [];

    function stringifying ( array, name, storagearray ) {
       for ( i = 0; i < array.length; i++ ) {
          var s = JSON.stringify( array[i] );
          storagearray.push(s);
          localStorage.setItem(name, JSON.stringify(storagearray));
       }
    }
    stringifying(frogarray, "frogs", storagefrog)
    stringifying(nestarray, "nests", storagenest)
    stringifying(genesisarray, "genesis", storagegenesis)
    localStorage.setItem("boondollars", boondollars)
}

オブジェクトの配列をlocalStorage正しく取得して保存する方法はありますか?可能であれば、より簡単でクリーンな方法ですか?

編集:

各配列からのオブジェクトの例を次に示します。

フロッグアレイまたはジェネシスアレイ:

parent1 = {
gender: "female",
colour: "red",
eyecolour: "blue",
pattern: "plain",
sized: "small",
}

ネストアレイ:

nest1 = {
typ: "normal",
nestTime: 0,
frog1: "",
frog2: "",
currentbreed: false,
}
4

0 に答える 0