2016-03-07 4 views
0

Следуя инструкциям по разработке игр с HTML5. И я не могу понять, почему этот кусок кода не отображает предупреждение, когда я нажимаю клавишу up на моей клавиатуре.Почему предупреждение не отображается?

var canvas = document.getElementById("mainCanvas"); 
var context = canvas.getContext("2d"); 

var keys = []; 

window.addEventListener("keydown", function(e) { 
    keys[e.keyCode] = true; 
}, false); 

window.addEventListener("keyup", function(e) { 
    delete keys[e.keyCode] 
}, false); 

if (keys[38]) alert("yep"); 

обеспечение Chrome консоль ясно показывает, что keys[38] является true и набрав if (keys[38]) alert("yep"); в консоли отображается предупреждение. Я думаю, что здесь отсутствует фундаментальная вещь (или в основном глупо). Я буду рад предоставить дополнительную информацию в случае, если в коде JS нет очевидной ошибки.

Спасибо!

+0

Что/Когда вы думаете, 'если (клавиши [38]) предупреждение («yep»), 'делает? Это, если выполняется до того, как вы наберете какие-либо ключи. – epascarello

+2

Что еще более важно, ** когда **, вы думаете, что он это делает. – Quentin

+0

Когда механизм javascript анализирует эту строку, 'keys [38]' все еще не определен. А 2011 MacBook Pro здесь не уместен. –

ответ

2

if будет называться прямо в конце вашего тика. Слушатели начинают стрелять, как только вы оставили этот тик. Следовательно, нет возможности установить массив keys при выполнении if.

Единственными фрагментами вашего кода, которые будут называться впоследствии, являются два обратных вызова, переданные keydown и keyup событиям. Если вы хотите отреагировать на эти события, ваш код должен находиться в внутри этих обратных вызовов.

1

Вы должны поместить свой код (alert) внутри слушателя событий следующим образом:

window.addEventListener("keydown", function(e) { 
 
    if(e.keyCode == 38) { 
 
    alert('BOOYAKA'); 
 
    } 
 
}, false);

Смежные вопросы