2014-10-15 2 views
0

Я делаю HTML-игру, в которой мне нужно вызвать функцию прыжка и ходьбы, чтобы заставить персонажа прыгать и ходить соответственно с помощью клавиш клавиатуры. Но я не могу этого сделать! Вот мой код:.Невозможно выполнить функции с помощью событий клавиатуры

document.getElementById('myCanvas').onkeypress = function() { 
     decision(); 
} 
function decision(e){ 
     if (e.keyCode == 87) { 
     jump();  
     } 
     if(e.keyCode == 68) { 
     walk(); 
     } 
    } 

с т.е. «ш» ключ он должен прыгать и с «D» ключ имеет прогулку !!

+2

Я думаю, вы должны передать e на решение, что-то вроде 'document.getElementById ('myCanvas'). Onkeypress = function (e) { решение (e); } ' – Romeo

+1

document.getElementById ('myCanvas'). Onkeypress = решение; –

ответ

0

Попробуйте

document.getElementById('myCanvas').onkeypress = function(e) { 
    decision(e); 
} 

function decision(e){ 
    if (e.which == 87) { 
    jump();  
    } 
    if(e.which == 68) { 
    walk(); 
    } 
} 

иметь также в виду, что вы можете использовать e.which или e.keyCode или e.charCode. Просто проверьте все, это зависит от браузера.

0

Вы не переходящим в событии е к decision() функции

document.getElementById('myCanvas').onkeypress = function(e) { 
    decision(e); 
} 

function decision(e){ 

    var key = e.keyCode ? e.keyCode : e.which; 

    if (key == 87) { 
     jump(); 
    } 
    if(key == 68) { 
     walk(); 
    } 
} 
2
function decision(e){ 
    var keyCode = e.keyCode || e.charCode; 

    if (keyCode === 87) { 
     jump();  
    } 
    if(keyCode === 68) { 
     walk(); 
    } 
} 

document.getElementById('myCanvas').onkeypress = decision; 

Вы не проезжали электронной аргумент функции обратного вызова, поэтому я удивлен, что это не взрывали как неопределенный.

Обратите внимание также, как назначить ссылку на функцию decision непосредственно на свойство onkeypress вместо того, чтобы обернуть ее анонимной функцией. Это приведет к аргументам прямо по желанию с ожидаемым контекстом Window (хотя в зависимости от ваших конкретных требований this внутри обратного вызова этот подход может не всегда быть подходящим).

Кроме того, убедитесь, что вы запрашиваете только для элемента по идентификатору, как только вы можете быть уверены в его наличии (то есть. Поместить этот код где-то после того, как целевой узел появляется в DOM, или использовать рамки как JQuery)

Наконец, e.keyCode не может быть определен так, как вы ожидаете, во всех браузерах, чтобы вы могли избежать этого, как указано выше.

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