Problem z zapisywaniem do localstorage

0

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

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

Zapisuję go tutaj

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

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 ?

0

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

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:

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

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

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1