如何使用A框中的"键盘控制"组件按住多个键



我在a帧中使用keyboard-controls组件,注意到我无法同时按住多个键。

请参阅下面使用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>

这里有一个小故障,打开控制台并尝试同时按住IJ

问题是,例如,在按住I的同时,如果我也按住J,它将停止听到I键按下,反之亦然。这不可能吗?还是我做错了什么?我知道这在正常的keydown事件中是可能的。。

如果有帮助的话,为了提供一些背景,我正在制造一辆汽车,并使用键盘控制为其提供动力。实际上,向前/向后按压会加速汽车,向左/向右按压会使汽车转弯,但实际上,只要我开始向任何一个方向转弯,油门就会停止,因为它不再听到向前按键的声音。

非常感谢任何建议。

这不是一个bug,而是对keydown事件的一个轻微误解。。。keydown事件行为可以最好地描述为在文字处理器或记事本中键入时所期望看到的内容。如果你按住I键,你会看到一个I键入,然后在一个小延迟后,快速重复I。然后在这期间再按住J,将完全停止键入I,键入J,然后在另一个小的延迟后,迅速重复J。

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

最新更新