2016-12-30 119 views
1

我想讓我的第一場比賽在jquery中的球員控制器,但有些事情是錯誤的。你能幫我嗎?keydown事件不起作用

$('canvas').keydown(function(e) { 
    alert('in function'); 
    if (e.keyCode == 37) {//37 - strzalka w lewo 
     moveleft(); 
    } 
    if (e.keyCode == 39) {//39 - strzalka w prawo 
     moveright(); 
    } 
    if (e.keyCode == 40) {//40 - strzalka w dol 
     movedown(); 
    } 
    if (e.keyCode == 38) {//38 - strzalka w gore 
     moveup(); 
    } 
    if (e.keyCode == 32) {//32 - spacja 

    } 
}); 

function moveup() { 
    gracz.speedY -= 1; 
} 

function movedown() { 
    gracz.speedY += 1; 
} 

function moveleft() { 
    gracz.speedX -= 1; 
} 

function moveright() { 
    gracz.speedX += 1; 
} 

當我按下箭頭,事件處理程序不起作用

+1

檢索在'canvas'鍵相關的事件是不可靠ST。使用'canvas'的父元素,或者甚至是'window',例如:https://jsfiddle.net/ayb9edLm/ –

+0

請看看這個問題:http://stackoverflow.com/questions/7613433/attach-keyboard-events-to-html5-canvas –

+0

感謝它的工作:) –

回答

1

檢索鍵相關的事件在畫布上是靠不住的最好的。使用Canvas而不是連窗口中的父元素,或者,例如:

$(window).keydown(function(e) { 
    // your code here... 
}); 

Working example

另外請注意,您可以通過將功能簡化代碼下內的按鍵事件來運行對象,通過它們的鍵碼值鍵,這樣的:

var gracz = { 
    speedY: 0, 
    speedX: 0, 
    keydown: { 
     '37': function() { gracz.speedX -= 1; }, // left 
     '38': function() { gracz.speedY -= 1; }, // up 
     '39': function() { gracz.speedX += 1; }, // right 
     '40': function() { gracz.speedY += 1; }, // down 
     '32': function() { console.log('SPACE'); } // space 
    } 
}; 

$(window).keydown(function(e) { 
    gracz.keydown[e.which](); 
    console.log(gracz); 
}); 

Working example