首页 文章

什么(如果有的话)是javascript keydown事件的优先级?

提问于
浏览
4

我正在尝试创建一个简单的javascript程序,它读取keydown事件并将它们转换为HTML画布上的移动 . 到目前为止,我已经取得了相当大的成功,我遇到了一个奇怪的问题(我假设是)箭头键优先 . 会发生的是,如果我握住右箭头,然后按下左箭头,则左箭头将接管 . 如果我按住左箭头,然后按向右箭头,则没有任何变化(我正在移动的块继续向左移动) . 我已经改变了读取keydowns的顺序,但没有成功 .

我阅读keydowns和keyups的代码是这样的:

//Listener for when keys are pressed
window.addEventListener('keydown', function (event) {
    keyCodes[event.keyCode] = true;
});

//Listener for keys being released
document.addEventListener('keyup', function (event) {
    keyCodes[event.keyCode] = false;
});

然后在这里解释它

//movement function
function move () {
    if (keyCodes[right]) {
        velX = 12.0;
    }
    if (keyCodes[left]) {
        velX = -12.0;
    }
};

function update() {
    if (keyCodes[right] || keyCodes[left])
        move();

    posX += velX;

    if (!keyCodes[right] && velX > 0)
        velX -= gravity;
    if (!keyCodes[left] && velX < 0)
        velX += gravity;
};

任何人都可以看到,或者是否有人已经知道,为什么左键优先于正确的键呢?

解决了:

修正移动功能如下:

function move () {
    if (keyCodes[left] && velX > -12.0) {
        velX -= 2.0;
    }
    if (keyCodes[right] && velX < 12.0) {
        velX += 2.0;
    }
};

1 回答

  • 0

    在您的功能中首先检查,如果按下右键,则检查是否按下了左键 . 如果未按下右键,则只应检查左键 .

    ...
    
        if (keyCodes[right]) {
            velX = 12.0;
        }
        // note the "else" before the "if"
        else if (keyCodes[left]) {
            velX = -12.0;
        }
    
        ...
    
        if (!keyCodes[right] && velX > 0)
            velX -= gravity;
        // again note the "else"
        else if (!keyCodes[left] && velX < 0)
            velX += gravity;
    
        ...
    

相关问题