如何在X3DOM中禁用键绑定

时间:2017-05-19 08:50:27

标签: javascript x3dom

我正在使用X3DOM进行简单的游戏,但我不能按照我想要的方式使用键盘键,因为X3DOM会对它们做出反应。

示例:

window.addEventListener('keydown', event => this.onKeyDown(event));

我希望if keyCode == 68拥有自己的关键事件。这很有效,但是X3DOM也会对它做出反应,方法是改变导航模式并显示叠加层。

如何禁用此功能?

2 个答案:

答案 0 :(得分:2)

免责声明:我从未使用过x3dom,我只是在源代码中闲逛

似乎有一些disables keypress handling

this.disableKeys = x3dElem.getAttribute("keysEnabled");
this.disableKeys = this.disableKeys ? (this.disableKeys.toLowerCase() == "true") : false;

稍后会在设置keypress event handler时阅读:

this.onKeyPress = function (evt) {
    if (!this.parent.disableKeys) {
        evt.preventDefault();
        this.parent.doc.onKeyPress(evt.charCode);
    }
    this.parent.doc.needRender = true;
}

因此,似乎设置keysEnabled=...属性可以将其关闭。奇怪的是,对于这种情况,他们的逻辑是向后(?)

  • x3dElem.getAttribute("keysEnabled")必须真实(即必须具有属性)
  • 如果那是假的,this.disableKeys总是假的
  • 否则等于该属性的值小写等于'true'

要禁用按键事件,请使用<... keysEnabled="true" ...>

我对倒退逻辑做了github issue,也许将来会改为keysDisabled="true"

更新:

在最新版本中,属性已重命名为disableKeys,因此请使用<... disableKeys="true" ...>

答案 1 :(得分:1)

您可以使用event.preventDefault阻止X3DOM对该密钥作出反应:

window.addEventListener('keydown', event => {
    if ((event.which === 68) || (event.keyCode === 68)){
        event.preventDefault();
        //
        // ...
        //
    }
});