我正在使用X3DOM做一个简单的游戏,但是我不能按我想要的方式使用键盘按键,因为X3DOM会对它们做出反应。
示例:
window.addEventListener('keydown', event => this.onKeyDown(event));我想要有我自己的if keyCode == 68的关键事件。这是可行的,但X3DOM也会对此做出反应,改变导航模式并显示覆盖。
如何禁用此功能?
发布于 2019-02-04 01:30:39
免责声明:我从未使用过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")必须为真(即它必须有一个属性),如果为falsethis.disableKeys始终为falsey它等于该属性的值,小写形式等于False值因此,要禁用按键事件,请使用<... keysEnabled="true" ...>
我做了一个关于向后逻辑的github issue,也许将来它会是keysDisabled="true"
更新:
在最新版本中,该属性已重命名为disableKeys,因此请使用<... disableKeys="true" ...>
发布于 2017-05-20 18:34:19
您可以使用event.preventDefault来阻止X3DOM对该键做出反应:
window.addEventListener('keydown', event => {
if ((event.which === 68) || (event.keyCode === 68)){
event.preventDefault();
//
// ...
//
}
});https://stackoverflow.com/questions/44065483
复制相似问题