似乎无法使这个计数器工作

时间:2016-02-26 22:17:57

标签: javascript

您好我正在尝试构建一个简单的网络浏览器游戏,它将为您提供单击键盘键达到限制的速度(例如50,75,100)。我在这里有这个代码:

HTML:

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
    <p id="dt"></p>
    <script src="game.js"></script>
</body>
</html>

使用Javascript:

var count = 0;
var IsGameAlive = 1;
window.onload = function() {
  myFunction()
}
document.onkeydown = function(e){
  if (IsGameAlive==1) {
      e = e || window.event;
      var key = e.which || e.keyCode;
      if(key==32){
          add();
      }
  }
}
function myFunction() {
  setInterval (stopwatch,1)
}
function stopwatch() {
  document.getElementById('dt').innerHTML = count;
}
function add() {
  count = count + 1;
}
if (count==50) {
  gamefinished();
}
function gamefinished() {
  window.alert("You Won!");
  IsGameAlive = 0;
  console.log("test");
}

我似乎无法获取if语句来执行将禁用控件并显示警报的函数。任何帮助或建议将不胜感激。

3 个答案:

答案 0 :(得分:0)

我认为你想要的是&#39; if&#39;在你的keydown函数中,否则它将在js执行时运行一次。

window.onload = function() {
    myFunction()
    document.onkeydown = function(e){
      if (IsGameAlive==1) {
          e = e || window.event;
          var key = e.which || e.keyCode;
          if(key==32){
              add();
          }
      }
    }
}

此外,正如Andy在评论中提到的,您可能希望将计时器更改为1秒而不是1/1000秒

function myFunction() {
  setInterval (stopwatch,1000)
}

答案 1 :(得分:0)

你的if语句应该在你的函数中。所以,而不是:

function add() {
  count = count + 1;
}
if (count==50) {
  gamefinished();
}

应该是:

function add() {
  count = count + 1;
  if (count==50) {
    gamefinished();
  }
}

答案 2 :(得分:0)

从您当前的代码判断,似乎有一些简单的一般错误,所以继续清理版本:

var count = 0;
var IsGameAlive = true; //use booleans
var interval; //store interval
window.onload = function() {
    myFunction(); //missing semi-colons
    if (IsGameAlive) { //if statement should be contained inside window.onload
      document.onkeydown = function(e){
          if (IsGameAlive){ //prevent detection when game ended
               e = e || window.event;
              var key = e.which || e.keyCode;
              if(key==32){
                  add();
              }
          }
      }
    }
}; //missing semi-colons

function myFunction() {
    interval = setInterval(stopwatch,1000); //missing semi-colons, and run every 1000 = 1 second
}
function stopwatch() {
    document.getElementById('dt').innerHTML = count;
}
function add() {
    count = count + 1;
    if (count>=50) {
        gamefinished();
    }
    return;
}
function gamefinished() {
    window.alert("You Won!");
    IsGameAlive = false;
    clearInterval(interval); //remove interval
    return;
}

修改 为了更好地保持时间,也许可以将计时器设置为每10毫秒运行一次,然后使用下面的函数来获得更准确的时间。 (与使用设置为1毫秒的定时器相比,这也是资源消耗较少,同时保持非常准确)。

var initialTime = Date.now(); //global variable

function getSecondsPassed(){
    return Math.floor((Date.now()-initialTime)/1000);
}