【问题标题】:setting a localstorage high score and displaying it设置本地存储高分并显示它
【发布时间】:2018-04-25 16:45:51
【问题描述】:

我正在尝试完成一个俄罗斯方块游戏,但在游戏结束后保存高分给我带来了一些问题。当游戏结束时,如果分数高于之前保存的高分,则应该将新的分数保存为本地的高分并显示该新的高分。我不知道为什么这没有发生。以下是我的代码中与高分相关的三个不同区域。任何帮助,将不胜感激。

在游戏一侧创建菜单

 <div id="tetris">
<div id="menu">
  <p id="start"><a href="javascript:play();">Press Space to Play.</a></p>
  <p><canvas id="upcoming"></canvas></p>
  <p>score <span id="score">00000</span></p>
  <p>rows <span id="rows">0</span></p>
  <p>high score <span id="highscore">0</span></p>
</div>
<canvas id="canvas">
  Sorry, this example cannot be run because your browser does not support the &lt;canvas&gt; element
</canvas>

游戏结束时设置高分

var highscore = localStorage.getItem("highscore");

  if (playing == false){
  if(highscore !==null){
      if(vscore > highscore) {
          localStorage.setItem("highscore", vscore);
      }
  }
  else{
      localStorage.setItem("highscore", vscore);
  }
  }
  else{
      null;
  }

更新分数以显示它们

function play() { hide('start'); reset();          playing = true;  }
function lose() { show('start'); setVisualScore(); playing = false; }

function setVisualScore(n)      { vscore = n || score; invalidateScore(); }
function setScore(n)            { score = n; setVisualScore(n);  }
function addScore(n)            { score = score + n;   }
function clearScore()           { setScore(0); }
function clearRows()            { setRows(0); }
function setRows(n)             { rows = n; step = Math.max(speed.min, speed.start - (speed.decrement*rows)); invalidateRows(); }
function addRows(n)             { setRows(rows + n); }
function setHighScore(n)        { highscore = n; }
function addHighScore(n)        { setHighScore(highscore); }
function getBlock(x,y)          { return (blocks && blocks[x] ? blocks[x][y] : null); }
function setBlock(x,y,type)     { blocks[x] = blocks[x] || []; blocks[x][y] = type; invalidate(); }
function clearBlocks()          { blocks = []; invalidate(); }
function clearActions()         { actions = []; }
function setCurrentPiece(piece) { current = piece || randomPiece(); invalidate();     }
function setNextPiece(piece)    { next    = piece || randomPiece(); invalidateNext(); }

function reset() {
  dt = 0;
  clearActions();
  clearBlocks();
  clearRows();
  clearScore();
  setCurrentPiece(next);
  setNextPiece();
}

function update(idt) {
  if (playing) {
    if (vscore < score)
      setVisualScore(vscore + 1);
    handle(actions.shift());
    dt = dt + idt;
    if (dt > step) {
      dt = dt - step;
      drop();
    }
  }
}

如果需要,我可以添加完整的游戏代码,但这是与高分问题直接相关的三个方面。

【问题讨论】:

  • 当你说sets the high score when the game is over时你能粘贴整个函数吗?因为我看不到你从哪里得到这些参数。
  • 我看到 localStorage 是在达到“高分”时设置的,但是您是否曾经在 DOM 中设置过高分?例如document.getElementById('highscore').text = localStorage.getItem("highscore")?例如达到 hs 后调用 setHighScore()?
  • @PrinceHernandez 本节 if (playing == false){ if(highscore !==null){ if(vscore > highscore) { localStorage.setItem("highscore", vscore); } } 抱歉,我是新手,我不知道如何将其粘贴到更容易阅读的地方
  • @bigbitecode 这是我不知道该怎么做的部分,在设置并显示高分后回忆它
  • @javascript896362 好吧,没有太多上下文,很难说,但我会在 if(playing) { ... } 结束之前添加关闭另一个 if 检查分数或 vscore 是否>高分。我会在这条评论后面发一个帖子。

标签: javascript local-storage


【解决方案1】:

尝试以下方法:

function update(idt) {
  if (playing) {
    if (vscore < score)
      setVisualScore(vscore + 1);
    handle(actions.shift());
    dt = dt + idt;
    if (dt > step) {
      dt = dt - step;
      drop();
    }
    // Add the following to update the highscore while playing.
    if (score > highscore) {
        setHighScore(score);
    }
  }
}

setHighScore = (score) => {

  // update highscore
  highscore = score;

  // update it visually?
  document.getElementById('highscore').text = highscore;
}

然后在游戏结束后您想要检查的地方——我会立即假设您将 play boolean 设置为 false。

if (playing === false){
    if(vscore > highscore) {
      // For future games.
      localStorage.setItem("highscore", vscore);
    }
}

编辑: 我正在手机上输入此内容,如果格式不正确,敬请见谅。 见例子:https://codepen.io/anon/pen/pVEJJW

【讨论】:

  • 补充说,全场比赛结束时似乎仍然没有保存分数
猜你喜欢
  • 1970-01-01
  • 2014-10-29
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 2016-10-31
相关资源
最近更新 更多