游戏中 JavaScript 本地存储问题

问题描述 投票:0回答:1

我一直在制作一个点击游戏,由于某种原因,当我向游戏中添加本地存储时,它停止工作。 JavaScript 似乎不再做任何事情了。 这是网站

这是代码

let played = window.localStorage.played;
if (played === true) {
  let points = window.localStorage.getItem("points");
  let cpc = window.localStorage.getItem("cpc");
  let cps = window.localStorage.getItem("cps");
  let clicks = window.localStorage.getItem("clicks");
  let secondsplayed = window.localStorage.getItem("secondsplayed");
} else {
  window.localStorage.setItem("played", true);
  let points = 0;
  let cpc = 1;
  let cps = 0;
  let clicks = 0;
  let secondsplayed = 0;
}

function abbrNum(number) {
  const formatter = Intl.NumberFormat("en", { notation: "compact" });
  return formatter.format(number);
}

function update() {
  document.getElementById("score").innerText = abbrNum(points);
  document.getElementById("upgcpc").innerText = "Upgrade CPC: $" + cpc * 2;
  document.getElementById("upgcps").innerText = "Upgrade CPS: $" + (cps * 5 + 10);
  document.getElementById("cpcstat").innerText = "CPC: " + abbrNum(cpc);
  document.getElementById("cpsstat").innerText = "CPS: " + abbrNum(cps);
  document.getElementById("clicksstat").innerText = "Clicks: " + abbrNum(clicks);
  document.getElementById("secondsstat").innerText = "Seconds played: " + abbrNum(secondsplayed);

  window.localStorage.setItem("points", points);
  window.localStorage.setItem("cpc", cpc);
  window.localStorage.setItem("cps", cps);
  window.localStorage.setItem("clicks", clicks);
  window.localStorage.setItem("secondsplayed", secondsplayed);
}

function autoclick() {
  points = points + cps;
  secondsplayed++;
  update();
}

update();

setInterval(autoclick, 1000);

document.getElementById("button").onclick = () => {
  points = points + cpc;
  clicks++;
  update();
};

document.getElementById("upgcpc").onclick = () => {
  if (points >= cpc * 2) {
    points = points - cpc * 2;
    cpc = cpc + 1;
    update();
  }
};

document.getElementById("upgcps").onclick = () => {
  if (points >= cps * 5 + 10) {
    points = points - (cps * 5 + 10);
    cps = cps + 0.5;
    update();
  }
};

我尝试自己解决问题,也使用了一些在网上找到的JavaScript检查器,但我无法解决它。我直接使用来自 W3Schools 的代码,所以我不完全确定为什么它不起作用。

javascript local-storage game-development
1个回答
0
投票

在 if 块内用 let 声明的变量只能在这些块内访问。 解决方案:将变量声明移到条件语句之外,以使它们可以全局访问。 window.localStorage 将值存储为字符串。在计算中使用它们之前将它们转换为数字。 解决方案:从 localStorage 检索值时使用 parseInt 或 parseFloat。 window.localStorage.getItem 是异步的,因此代码可能会在检索值之前执行。 解决方案:在继续之前使用 Promise 或回调来确保值可用。

// Declare variables globally
let points = 0;
let cpc = 1;
let cps = 0;
let clicks = 0;
let secondsplayed = 0;

// Check for played status and retrieve values
window.localStorage.getItem("played")
  .then((played) => {
    if (played === "true") {
      points = parseInt(window.localStorage.getItem("points"));
      cpc = parseInt(window.localStorage.getItem("cpc"));
      cps = parseFloat(window.localStorage.getItem("cps"));
      clicks = parseInt(window.localStorage.getItem("clicks"));
      secondsplayed = parseInt(window.localStorage.getItem("secondsplayed"));
    } else {
      window.localStorage.setItem("played", "true");
    }

    // Rest of your game logic
  })
  .catch((error) => {
    console.error("Error retrieving values from localStorage:", error);
  });

© www.soinside.com 2019 - 2024. All rights reserved.