2013-05-10 34 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