如何同时处理多个密钥
How to handle more keys at the same time?
我正在用easel 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();
}
});
但是,我如何使它同时旋转和向前移动呢?
您要查找的两个事件都将发生在侦听器内部。如果你想创建一个在按键后继续运行的操作,你需要在循环中执行该操作,并用事件监听器激活它。例如。。。。
$(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);
然后只需在keyup监听器中监听那些向上的键,并将turn/move设置为false。
据我所知,你不能做你想做的事。唯一可以同时按下的键是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
数组中(除非它已经存储),然后程序会检查按下的键,最后,当用户"向上移动鼠标"时,数组会重置。
注意:假设按下的键分别为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
}
相关文章:
- API密钥使用和检查示例
- react.js中的密钥绑定
- JS对象密钥序列
- 似乎无法使用javascript从AWS 3S中删除密钥
- 加载两个具有相同父密钥名称的json文件
- 如何获取$data.Entity的密钥
- Angular ngRepeat:重复错误(尽管没有重复的密钥)
- CryptoJS和密钥/IV长度
- 基于api密钥的NodeJS web服务
- 输入密钥和firefox提示
- React Rails应用程序中动态子项的密钥分配问题
- 正在Javascript Cookie中设置重复密钥
- 通过localStorage中的密钥获取ID
- 如何处理MongoDB密钥名称中的点
- 如何同时处理多个密钥
- 杰克逊 JSON 处理密钥名称 = ognl 名称
- 如何使用参数传递客户密钥处理程序
- 使用非标准密钥长度调用CryptoJS.AES.encrypt/decrypt时,如何处理AES密钥
- 使用 node-mysql 正确处理重复的密钥
- 协调Firefox斜杠处理和密钥代码