2013-05-10 4 views
3

Je this code:Enregistrer gameplay dans 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"; 
} 

Et je veux sauver l'état du jeu dans localStorage, et après avoir rafraîchi la page Je veux rafraîchir l'état du jeu.

Qu'est-ce que je fais mal?

+1

Vous établissiez un '' window.onload' l'intérieur de l'emballage window.load' jsFiddle. Retiré de votre violon, utilisez le 'No wrap - in ' en haut à gauche de la page. –

+0

Est-ce que localStorage a une méthode 'getObj'? – adeneo

+0

@ FabrícioMatté Pourquoi répondez-vous en éditant son lien JSFiddle dans sa propre question au lieu de faire une nouvelle réponse et de publier le vôtre ici x)? – RelevantUsername

Répondre

2

Donc, il y a deux problèmes que j'ai remarqués dans votre violon. D'abord, vous avez une fonction que vous appelez qui n'est pas définie, donc vous n'exécutez pas la fonction setObj.

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

I ajouté dans une fonction clickCounter factice pour vous qui ne fait rien.

En outre, vous chargiez le piecesArray à partir du stockage local, mais en le remplaçant de toute façon. Une fois votre image chargée, vous devez vérifier si vous avez déjà un piecesArray. Je l'ai fait comme ceci:

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

Bière pour vous! THX! – Piszu

-1

Set Point avec

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

et obtenir article avec

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

Si aucune valeur stockée dans localStorage, vous obtiendrez 'null'. Donc, vous pouvez utiliser:

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

non ce n'est pas la solution. Il utilise des fonctions spécifiques getObj et setObj pour définir et obtenir des objets. Regarde son violon. – Niall

+0

Ça n'aide pas. – Piszu

+0

@Piszu vous devez enregistrer votre piecesArray à l'exécution avec localStorage.setItem (JSON.stringify (piecesArray)); Je l'utilise sans aucun problème – RWAM

Questions connexes