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

马可·波利斯(Marco Bolis)

我正在用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事件列表的数组(带有“主”键和修饰符的对象)。handleInput函数将负责在每次轮询队列时清空队列
  • 跟踪内部可能的按键组合handleInput(监视按下的修饰键)并在“主”键上升时触发组合行为(我实际上并不那么喜欢)

您是否可以建议我以一种优雅的方式扩展当前功能?

PDKnight

您所要做的就是创建upInput变量,将密钥存储在其中。然后,要检查是否按下了组合键,您必须检查CTRL + C变量中是否只有(或17、67)个组合键,以及是否所有组合键true然后轻松打印您的消息并重置upInput变量。

var input = upInput = {};

document.onkeydown = function(e) {
    input[e.keyCode] = true;
    if (JSON.stringify(Object.keys(upInput)) != '["17","67"]')
        upInput = {};
}
document.onkeyup = function(e) {
    var k = e.keyCode;
    input[k] = false;
    if ([17, 67].indexOf(k) > -1)
        upInput[k] = true;
    if (JSON.stringify(Object.keys(upInput)) == '["17","67"]'
            && upInput[17] && upInput[67]) // CTRL + C
        alert('YES!'),
        upInput = {};
}

演示版

希望对您有所帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

Zimra-如何处理按键事件?

来自分类Dev

如何处理while循环中的删除

来自分类Dev

事件循环如何处理JavaScript中的事件处理程序?

来自分类Dev

事件循环如何处理JavaScript中的事件处理程序?

来自分类Dev

如何处理意外的按键

来自分类Dev

如何处理for循环中的错误(python)并继续执行

来自分类Dev

如何处理循环中调用的异步函数?

来自分类Dev

如何处理在循环中创建的视图上的UITapGestureRecognizer?

来自分类Dev

函数while循环中的返回如何处理?

来自分类Dev

如何处理for循环中的promise进行递归

来自分类Dev

Flink 如何处理迭代循环中的时间戳?

来自分类Dev

主游戏循环中的时间计算

来自分类Dev

Qt如何处理事件发出的无限循环?

来自分类Dev

Pygame:如何在我的主游戏循环中调用定义在类内的变量?

来自分类Dev

如何在主游戏循环中使用 sfml 只播放一次声音

来自分类Dev

pygame clock.tick()与游戏主循环中的帧速率

来自分类Dev

如何处理游戏中的异常

来自分类Dev

如何处理循环依赖?

来自分类Dev

如何处理这个循环?

来自分类Dev

如何处理无限循环

来自分类Dev

如何处理这个循环?

来自分类Dev

如何处理无限循环

来自分类Dev

如何处理异步循环?

来自分类Dev

在for循环中绑定事件处理程序

来自分类Dev

在循环中绑定事件处理程序

来自分类Dev

在foreach循环中插入列表时如何处理事务

来自分类Dev

AngularJS摘要循环中的观察者和过滤器如何处理?

来自分类Dev

在foreach循环中插入列表时如何处理事务