我正在用 JavaScript 编写一个简单的游戏,它已经可以处理基本的键盘输入,如下所示:
var input = {};
document.onkeydown = function(e) {
input[e.keyCode] = true;
}
document.onkeyup = function(e) {
input[e.keyCode] = false;
}
while (!done) {
handleInput(input);
update();
render();
}
现在我需要游戏来处理组合键(例如 CTRL+X)。我希望它仅在 keyup
上接受此类组合。
编辑:修饰键不需要与“主”键同时全部向上。 /编辑
我想到的两种可能的解决方案是:
- 暴露一个包含
keyup
事件列表的数组(带有“main”键加修饰符的对象)。handleInput
函数将负责在每次轮询队列时清空队列 - 跟踪
handleInput
内可能的组合键(监视按住的修饰键)并在“主”键上升时触发组合行为(我实际上不太喜欢这个)
您能建议我一种优雅的方式来扩展当前功能吗?
最佳答案
试试这个;) 当您按下 CTRL + X 并松开其中一个(或两个)时,会出现一条消息
var map = {17: false, 88: false};
var fire_event = false;
window.addEventListener('keydown', function(e) {
if (e.keyCode in map) {
map[e.keyCode] = true;
if (map[17] && map[88]) {
fire_event = true;
}
}
}, false);
window.addEventListener('keyup', function(e) {
if (e.keyCode in map) {
map[e.keyCode] = false;
}
if (fire_event) {
fire_event = false;
alert('YOU PRESSED CTRL + X');
}
}, false);
关于javascript - 如何处理主游戏循环中的按键事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39295495/