javascript - 如何处理主游戏循环中的按键事件?

标签 javascript keyboard-shortcuts keyboard-events game-loop

我正在用 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/

相关文章:

android - 从 Android 代码中提取字符串到 Intellij 中的 strings.xml 文件的捷径是什么?

dom - 获取用户输入的字符

python - 使用 Python,如何在后台等待按键时在前台运行循环?

javascript - 在 JavaScript 中添加两个指数数

editor - 如何找到 Atom 文本编辑器中的键盘快捷键分配?

javascript - 单击时防止文本突出显示

xcode - Xcode 中的键盘快捷键停止工作

c++ - 通过拦截发送按键

javascript - jQuery 自动完成不选择项目

javascript - CRM 2011 HTML 网络资源 : getContext produces "Object doesn' t support property or method"