我正在使用X3DOM进行简单的游戏,但我不能按照我想要的方式使用键盘键,因为X3DOM会对它们做出反应。
示例:
window.addEventListener('keydown', event => this.onKeyDown(event));
我希望if keyCode == 68
拥有自己的关键事件。这很有效,但是X3DOM也会对它做出反应,方法是改变导航模式并显示叠加层。
如何禁用此功能?
答案 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();
//
// ...
//
}
});