如标题所示,我尝试了THREEx和Stemkovskis独立的KeyboardState.js,但它们似乎都无法正确更新。

这是我的代码:

m_vKeyboard = new THREEx.KeyboardState();
// m_vKeyboard.update(); // if using stemkovskis
if (m_vKeyboard.pressed("F")) {
    alert("And now it is always true!");
}


单击一次F键,然后释放它;弹出警报窗口,单击确定,它再次弹出所有永恒。怎么来的?

最佳答案

许多浏览器重复keydown。阅读更多herehere (ctrl+f : auto-repeat)

这是针对您特定问题的建议解决方案:

A.当keydown在某些数组中将其状态存储为true并在keyup上设置为false时。

wasPressed['F'] = true;  //on keydown
wasPressed['F'] = false; //on keyup


B.在检查下一个keydown时,还要检查其状态。

if (m_vKeyboard.pressed("F") && !wasPressed['F'])


查找完整的实现:Here

更新

var wasPressed  = {};
if( keyboard.pressed('F')  && !wasPressed['f'] ){
            alert("F was pressed");
            prompt("Enter data : ");
            wasPressed['f'] = true;
        }


更新2

keyboard.domElement.addEventListener('keydown', function(event){
            wasPressed  = {};
    })

关于javascript - 在.prompt或alert之后,KeyboardState.pressed始终为true-为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23911666/

10-10 17:49