2016-02-26 2 views
3

Привет, я пытаюсь создать простую игру в веб-браузере, где вам пора вам быстро нажимать клавишу клавиатуры до предела (например, 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"); 
} 

Я не могу показаться, чтобы получить, если заявление, чтобы выполнить функцию, которая будет отключать элементы управления и отображать предупреждение , Любая помощь или предложения будут оценены.

+0

Можете ли вы дать нам JSFiddle? –

+1

Схват элемента из DOM каждые миллисекунды, вероятно, не является хорошей идеей fwiw. – Andy

+0

Вы, если оператор вызывается один раз, скорее всего, до того, как ваш дом еще готов –

ответ

0

Ваших если заявление должно быть внутри вашей функции. Таким образом, вместо того, чтобы:

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

Должно быть:

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

Спасибо, человек, это работает, можете ли вы дать мне краткое объяснение, почему это не сработало? Я только начал Javascript. Спасибо :) –

+0

То, как вы это делали раньше, утверждение if не было внутри какой-либо из функций. Любой код, не входящий в функцию, будет выполняться только один раз, когда страница изначально загружается. Вы хотите, чтобы он выполнял * каждый раз, когда счетчик изменяется, поэтому вам нужно поместить его в функцию add(). Надеюсь, это поможет! – GreenGiant

+0

Большое вам спасибо! –

0

Я думаю, что вы хотите, это «если» внутри вашей функции 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(); 
      } 
     } 
    } 
} 

Кроме того, как Энди упоминается в комментариях, вы можете изменить таймер на 1 секунду вместо 1/1000 второго

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

Я отредактировал его, все еще не работая, больше предложений? –

+0

throw throwing, что 'document.onkeydown' раздел внутри вашего' window.onload' –

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 миллисекунд, но затем используя функцию su ch, как показано ниже, чтобы получить более точное время. (это также менее ресурсоемкий, хотя и остается очень точным, по сравнению с использованием таймера, установленного в 1 миллисекунду).

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

function getSecondsPassed(){ 
    return Math.floor((Date.now()-initialTime)/1000); 
} 
Смежные вопросы