Problem z zapisywaniem do localstorage

Problem z zapisywaniem do localstorage
Raloseq
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 291
0

Witam robię gierkę typu clicker, chcę zapisywać dane w localStorage.
Mam obiekt

Kopiuj
let gameMoney = {
    money: 0,
    moneyPerClick: 1,
    moneyPerSecond: 0
};

Zapisuję go tutaj

Kopiuj
setInterval(()=>{
    localStorage.setItem('money',JSON.stringify(gameMoney));
    localStorage.setItem('items',JSON.stringify(items));
    localStorage.setItem('upgrades',JSON.stringify(upgrades));
},1000);

Tutaj zwiększam zawartość gameMoney.money

Kopiuj
let totalMoney = gameMoney.money;
btnEarnMoney.addEventListener('click',()=>{
    totalMoney += gameMoney.moneyPerClick;
    gainedMoney.textContent = totalMoney;
});

Niestety nic się nie zapisuje po czasie 1s co może być przyczyną takiego problemu ?

Realistic Elephant
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

"Tutaj zwiększam zawartość gameMoney.money" - Wcale tego nie robisz, byłoby to prawdą gdybyś napisał to tak:

Kopiuj
setInterval(() => {
  localStorage.setItem("money", JSON.stringify(gameMoney));
}, 1000);

btnEarnMoney.addEventListener("click", () => {
    gameMoney.money += gameMoney.moneyPerClick;
    gainedMoney.textContent = gameMoney.money;
});

Przy kliknięciu zmieniasz wartość zmiennej "totalMoney" a nie "gameMoney.money". To, że do zmiennej "totalMoney" przypisałeś wartość "money" należącą do obiektu "gameMoney" nie znaczy, że przy zmianie wartości tej zmiennej zmieni się też wartość "money" w obiekcie "gameMoney".

Jeżeli chcesz żeby "totalMoney" było aktualizowane to zapisz to tak:

Kopiuj
setInterval(() => {
  localStorage.setItem("totalMoney", JSON.stringify(totalMoney));
}, 1000);

let totalMoney = gameMoney.money;
btnEarnMoney.addEventListener("click", () => {
    totalMoney += gameMoney.moneyPerClick;
    gainedMoney.textContent = totalMoney;
});

Realistic Elephant
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
1

Wspomnę jeszcze, że jak podmienisz tamten kod to dane w Local Storage będą się co prawda updatować ale przy odświeżeniu strony znikną. Żeby post nie był zbyt długi to masz tutaj linka do JSFiddle: https://jsfiddle.net/30gjbt7L/1/

Teraz dane powinny zostawać w Local Storage przy odświeżeniu strony (jak odpalisz kod na Live Server - na JSFiddle tak nie będzie). Oprócz tego napisałem dwa proste upgrade-y, które zauważyłem, że będziesz chciał dodać. Możesz na przykład umożliwić użycie tych buttonów od wyklikania danej liczby i znowu blokować aż do osiągnięcia następnego progu itd.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.