javascript - 如何在 A 框架中按住多个带有 `keyboard-controls` 组件的按键

标签 javascript aframe

我正在使用keyboard-controls component在一个框架中,我注意到我无法同时按住多个键。

请参阅下面使用 IJ 键的精简示例。

使用以下脚本

 <script src="https://aframe.io/releases/0.8.2/aframe.min.js"></script>
 <script src="https://cdn.rawgit.com/donmccurdy/aframe-keyboard-controls/a9c513fc/dist/aframe-keyboard-controls.js"></script>

组件;

AFRAME.registerComponent('keytest', {
    dependencies: ['keyboard-controls'],

    init: function () {

        //I Keydown
        this.el.addEventListener('keydown:KeyI', (e) => { 
            console.log("I Key down")
        });

        //K Jeydown
        this.el.addEventListener('keydown:KeyJ', (e) => { 
            console.log("J Key down")
        });
    },
});

然后附加到场景

<a-scene keytest> 
</a-scene>

here is a glitch ,打开控制台并尝试同时按住 IJ

问题是,例如,在按住 I 的同时,如果我同时按住 J,它就会停止听到 I 按键声,反之亦然。反之亦然。这不可能吗?或者我做错了什么?我知道这可以通过正常的按键事件实现。

为了提供一些背景信息(如果有帮助的话),我正在制造一辆车辆并使用键盘控件为其供电。事实上,向前/向后按会加速汽车,向左/向右会转动汽车,但事实上,一旦我开始向任一方向转动,加速器就会停止,因为它不再听到向前按键的声音。

非常感谢任何建议。

最佳答案

这不是一个错误,而是您对 keydown 事件的轻微误解... keydown 事件行为可以最好地描述为您在文字处理器或记事本中键入时所期望看到的行为。如果您按住 I 键,您会看到输入了 I,然后在短暂的延迟后,快速重复 I。然后在此期间另外按住 J 将完全停止输入 Is,键入 J,然后再经过另一个短暂的延迟,快速重复J。

您应该做的是,一旦触发单个 keydown 事件,将内部变量设置为 true,也许将其称为throttle、steeringLeft 等...然后当为该键触发 keyup 事件时,将其设置回 false。根据这些变量的真/假状态来控制汽车。

关于javascript - 如何在 A 框架中按住多个带有 `keyboard-controls` 组件的按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51327483/

相关文章:

javascript - 使用 JQuery 代替 CSS 的幻灯片动画

javascript - 垂直滚动图片库

javascript - 通过交换其内容在同一个 div 中请求确认?

angular - 如何从 Angular 属性绑定(bind)加载框架资源

javascript - 在条件语句中返回函数值

javascript - Aframe + vuejs - 核心 :schema:warn Unknown property `color` for component/system `undefined` . +10ms aframe.js:327

javascript - 如何在 A-Frame 中呈现 HTML?

javascript - "onload=foo(event)"是什么意思?

javascript - 使用 Javascript HTML 公式

aframe - 如何隐藏带有 A 形框架的元素?