2017-01-23 2 views
0

Я работаю над файлом сохранения для своей игры. Сохранить файл работает, и console.log отображает правильные значения:Установите данные из localStorage, когда пользователь подключен

function saveGame(){ 
    localStorage.setItem('game', JSON.stringify(game)); 
} 
function loadGame(){ 
    var retrievedObject = localStorage.getItem('game'); 
    console.log('retrievedObject: ', JSON.parse(retrievedObject)); 
} 

Изображение журналов: https://s28.postimg.org/bslusmagt/Untitled.png enter image description here

Я еще новичок на все это, как я начал изучать JS пару месяцев тому назад. Сейчас я предполагаю, что когда страница загружена, я должен установить все эти значения. Попытка следующей вещи я получаю «нуль» в console.log

console.log(JSON.parse(localStorage.getItem('game.plutonium'))); 

я думал, что значения могут быть установлены что-то вроде:

game.plutonium = localStorage.getItem('game.plutonium'); 

Но это не работает. Что тут трюк?

Вот мой полный код JS, на всякий случай: http://pastebin.com/yM2wz410

значения определяются из строки 1 и сохранить/загрузить файл на линии 350-356. Почему мой метод не работает?

function saveGame(){ 
    var savefile = JSON.stringify(game); 
    localStorage.setItem("game", savefile); 
} 

function loadGame(){ 
    var savefile = localStorage.getItem("game"); 

    if (savefile === null) { 
     return; 
     } 

    game = JSON.parse(savefile); 
} 

Метод выше, кажется, полностью решил проблему. Спасибо :)

ответ

1

JSON.stringify() изменяет объект, который вы передаете его в строку (которую можно хранить очень легко). Но: вы больше не можете перемещаться по этой строке через string.key

Чтобы перевести эту строку json обратно в объект (который можно перемещать снова), вам необходимо использовать JSON.parse().

Ваша проблема заключается в том, что вы храните весь объект (как json) в хранилище с ключом game, а затем попытаетесь получить товар game.plutonium из хранилища. Обратите внимание, что вы ничего не спасли как game.plutonium.

Вы должны сначала извлечь всю строку json через localStorage.getItem('game'), затем проанализировать строку обратно на объект, и только после этого вы можете перемещаться по ней снова, как game.plutonium.

var game = JSON.parse(localStorage.getItem('game')) 
var plutonium = game.plutonium; 
+0

мне удалось заставить его работать с функции сохранений() { \t вар SAVEFILE = JSON.stringify (игра); \t localStorage.setItem («игра», savefile); } функция loadGame() { \t var savefile = localStorage.getItem ("game"); \t game = JSON.parse (savefile); } Но проблема теперь возникает в игре gamestart. Если i loadGame и localStorage пустая игра не работает. если я сначала сохранюGame, то я всегда буду переопределять сохраненные данные ... Я пытаюсь найти работу с помощью boolean – MiloSx7

+0

, вам нужно будет проверить, действительно ли элемент, который вы получаете из localStorage, уже существует, и только затем загружать его в свой игровой объект. Если он не существует ('getItem()' возвращает null), заполните ваш игровой объект некоторыми значениями по умолчанию (без сохранения игры, первый запуск) –

+0

Спасибо, теперь это работает. Приятного человека дня! – MiloSx7

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