如何在 A-frame 中使用 `keyboard-controls` 组件按住多个键

How can I hold down multiple keys with `keyboard-controls` component in A-frame

我在 a-frame 中使用 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 按键,反之亦然。这不可能吗?还是我做错了什么?我知道这对于正常的按键事件是可能的..

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

非常感谢任何建议。

这不是错误,而是您对 keydown 事件的轻微误解... keydown 事件行为最好描述为您在文字处理器或记事本中键入时期望看到的行为。如果你按住 I 键,你会看到一个 I 键入,然后在一小段延迟之后,快速重复 I。然后在此期间另外按住 J 将阻止 Is 被完全键入,键入一个 J,然后在另一个小延迟之后, 快速重复 J.

你应该做的是,一旦触发了一个 keydown 事件,将一个内部变量设置为 true,也许将其称为 throttle、steeringLeft 等...然后当为此触发 keyup 事件时键,将其设置回 false。根据这些变量的 true/false 状态进行汽车操纵。