我正在使用画架js和jQuery制作游戏。 我想要同时处理多个按键。 我有一把钥匙的代码:
$(document).keydown(function(e){
if (e.keyCode == 37) {
angle=angle+1;
}
if (e.keyCode == 40) {
rad=angle*Math.PI/180;
charachter.x=charachter.x-speed*Math.cos(rad);
charachter.y=charachter.y-speed*Math.sin(rad);
stage.update();
}
if (e.keyCode == 39) {
angle=angle-1;
}
if (e.keyCode == 38) {
rad=angle*Math.PI/180;
charachter.x=charachter.x+speed*Math.cos(rad);
charachter.y=charachter.y+speed*Math.sin(rad);
stage.update();
}
});
但是我如何才能让它同时旋转并向前移动呢?
答案 0 :(得分:1)
您正在寻找的两个事件都将发生在该侦听器中。如果要创建在按下键后继续运行的操作,则需要在循环内执行该操作并使用事件侦听器激活它。所以例如......
$(document).keydown(function(e){
if (e.keyCode == 40) {
turn = true;
}
if (e.keyCode == 38) {
move = true;
}
});
setTimeout(function() {
if(turn) {
// turn
}
if(move) {
// move
}
}, 1000 / 24);
然后只是听一下键盘监听器上的那些键并将turn / move设置为false。
答案 1 :(得分:0)
据我所知,你无法做你想做的事。可以同时按下的唯一键是 ctrl , shift 和 alt :
$(document).keydown(function(e){
var ctrl = e.ctrlKey,
shift = e.shiftKey,
alt = e.altKey,
altGr = e.altGraphKey,
code = e.keycode || e.which;
if(code==='65' && ctrl){
//Ctrl+A
}
if(code==='65' && shift){
//Shift+A
}
if(code==='65' && alt){
//Alt+A
}
if(code==='65' && altGr){
//AltGr+A
}
});
但是,我不知道这个示例是否适用于所有主流浏览器(适用于Chrome,Firefox,Safari以及Opera和IE)。
另一种方法是做@MrOBrian所说的,将按下的键保存在数组中:
var keys = [];
$(document).keydown(function(e){
var key = e.keyCode || e.which;
if(keys.indexOf(key)===-1)
keys.push(key);
if(keys[0]===65 && keys[0]===66){
//A and B pressed, respectively
}
if(keys.indexOf(67)!==-1 && keys.indexOf(68)!==-1){
//C and D pressed, the order doesn't matter
}
});
$(document).keyup(function(){
keys = [];
});
这样,无论何时按一个键,它都会存储在keys
数组中(除非它已经存储过),然后程序将检查按下的键,最后是用户“mouses up”,阵列将被重置。
注意强>: 我们假设按下的键分别是 A 和 B 。如果要检查是否按此顺序按下了它们,则必须使用以下条件:
if(keys[0]===65 && keys[0]===66){
//A and B pressed, respectively
}
但是,如果您只想检查它们是否被按下且顺序无关紧要,您只需检查它们是否在keys
数组中,具有以下条件:
if(keys.indexOf(65)!==-1 && keys.indexOf(66)!==-1){
//A and B pressed, the order doesn't matter
}