2013-05-10 3 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' внутри window.load' обертку в JSFiddle в. Удалите его из своей скрипки, используйте «Нет обернуть» в 'вверху слева от страницы. –

+0

Имеет ли localStorage метод 'getObj'? – adeneo

+0

@ FabrícioMatté Почему вы отвечаете, редактируя его ссылку JSFiddle в своем собственном вопросе, вместо того, чтобы делать новый ответ и размещать здесь здесь x)? – RelevantUsername

ответ

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

-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

+0

Это не поможет. – Piszu

+0

@Piszu Вы должны сохранить свои фигуры во время выполнения с помощью localStorage.setItem (JSON.stringify (штукArray)); Я использую это без проблем – RWAM

Смежные вопросы