2013-05-10 136 views
3

我有this code保存的游戏在localStorage的

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了比赛状态,并刷新页面后,我要刷新的游戏状态。

我在做什么错?

+1

你设置了一个'window.onload'内的jsfiddle的'window.load'包装。从你的小提琴中取出它,使用页面左上方的'无包装 - '。 – 2013-05-10 15:24:36

+0

localStorage有一个'getObj'方法吗? – adeneo 2013-05-10 15:26:03

+0

@FabrícioMatté你为什么回答编辑他的JSFiddle链接在他自己的问题,而不是作出一个新的答案,并张贴你在这里x)? – RelevantUsername 2013-05-10 15:26:16

回答

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(); 

} 

Working Fiddle

+0

啤酒给你!谢谢! – Piszu 2013-05-10 16:01:15

-1

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

设定项目与

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

获得项目如果存储在localStorage的没有价值,你会得到 '空'。所以你可以使用:

var pieces = localStorage.getItem('piecesArray'); 
if (pieces) { 
    piecesArray = JSON.parse(pieces); 
} else { 
    piecesArray = new Array(); 
} 
+0

不,这不是解决方案。他使用特定的getObj和setObj函数来设置和获取对象。看他的小提琴。 – Niall 2013-05-10 15:39:34

+0

它没有帮助。 – Piszu 2013-05-10 15:40:10

+0

@Piszu你必须在运行时用localStorage.setItem(JSON.stringify(piecesArray))保存你的piecesArray;我用这个没有任何问题 – RWAM 2013-05-10 15:42:59