我如何在A帧中使用“ keyboard-controls”组件按住多个键

时间:2018-07-13 14:31:06

标签: javascript aframe

我正在使用keyboard-controls component框架,但我无法同时按住多个键。

请在下面使用from ipywidgets import widgets from IPython.display import display import matplotlib.pyplot as plt import numpy as np %matplotlib notebook x = np.arange(10) fig, ax = plt.subplots() scatter = ax.scatter(x,x, label="y = a*x+b") ax.legend() def update_plot(a, b): y = a*x+b scatter.set_offsets(np.c_[x,y]) ax.ignore_existing_data_limits = True ax.update_datalim(scatter.get_datalim(ax.transData)) ax.autoscale_view() fig.canvas.draw_idle() a = widgets.FloatSlider(min=0.5, max=4, value=1, description= 'a:') b = widgets.FloatSlider(min=0, max=40, value=10, description= 'b:') widgets.interactive(update_plot, a=a, b=b) registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/"); 键查看精简示例。

使用以下脚本

registry.addResourceHandler("/resources/**").addResourceLocations("WEB-INF/resources/");

组件;

multi method

然后附加到场景

#!/usr/bin/env perl6
use v6;

class Test
{
    method test(@data, Int $length = @data.elems) {
        say 'In method test length ', $length, ' data ', @data.perl;
        return 0;
    }
}

my @t = 't1', 't2', 't3';
say Test.test(@t);

然后here is a glitch,打开控制台并尝试同时按住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> 键按下的声音,反之亦然。这不可能吗?还是我做错了什么?我知道这可以通过正常的按键事件来实现。.

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

任何建议都值得赞赏。

1 个答案:

答案 0 :(得分:1)

这不是bug,而是您对keydown事件的轻微误解... keydown事件的行为最好描述为您在键入文字处理器或记事本时会看到的内容。如果按住I键,您会看到输入了I,然后经过一小段延迟后,快速重复I。然后在此期间再按住J,将阻止完全键入Is,键入J,然后再经过一小段延迟,快速重复J。

您应该做的是,一旦触发了单个keydown事件,将内部变量设置为true,则可以将其称为节流阀,steeringLeft等,然后在为该键触发keyup事件时,将其设置回false。根据这些变量的正确/错误状态进行汽车操纵。