3

我有这个代码

Storage.prototype.setObj = function(key, obj) {
    return this.setItem(key, JSON.stringify(obj))
}
Storage.prototype.getObj = function(key) {
    return JSON.parse(this.getItem(key))
}
function onReady() {
    if (localStorage["piecesArray"]) {
        piecesArray = new Array();
        piecesArray.length = 0; 
        piecesArray = localStorage.getObj("piecesArray");
    } else {
        piecesArray = new Array();
    }
    can = document.getElementById('myCanvas');
    ctx = can.getContext('2d');         
    img = new Image();
    img.onload = onImage1Load;
    img.src = "http://www.niagaraparks.com/images/wallpaper/niagarafalls_640x480.jpg";
}

我想将游戏状态保存在 中localStorage,刷新页面后我想刷新游戏状态。

我究竟做错了什么?

4

2 回答 2

2

所以,我在你的小提琴中注意到了两个问题。

首先,您有一个未定义的正在调用的函数,因此您没有运行该setObj函数。

if (drawHighlight) highlightRect(drawX, drawY);
// liczymy kliknięcia
clickCounter(); // This function doesn't exist
localStorage.setObj("piecesArray", piecesArray);

clickCounter我为你添加了一个不做任何事情的虚拟函数。

此外,您正在piecesArray从本地存储加载,但无论如何都只是覆盖它。加载图像后,您需要检查是否已有piecesArray. 我是这样做的:

function onImage1Load() {
    var r;
    if (piecesArray.length === 0) {
        for (var i = 0; i < 4; i++) {
            for (var j = 0; j < 3; j++) {
                r = new Rectangle(i * blockSize, j * blockSize, i * blockSize + blockSize, j * blockSize + blockSize);
                piecesArray.push(r);
            }
        }

        scrambleArray(piecesArray, 30);
    }
    drawImage();

}

工作小提琴

于 2013-05-10T15:55:42.217 回答
0

设置项目

localStorage.setItem(key, JSON.stringify(yourValue));

并获得项目

JSON.parse(localStorage.getItem(yourValue));

如果 localStorage 中没有存储任何值,您将得到“null”。所以你可以使用:

var pieces = localStorage.getItem('piecesArray');
if (pieces) {
    piecesArray = JSON.parse(pieces);
} else {
    piecesArray = new Array();
}
于 2013-05-10T15:35:02.223 回答