4
我試圖創建一個簡單的JavaScript程序,它讀取keydown事件並將它們轉換爲HTML畫布上的移動。到目前爲止,我已經獲得了相當大的成功,我遇到了一個奇怪的問題(我認爲是)箭頭鍵優先級。會發生的是,如果我按住右箭頭,並按下左箭頭,則左箭頭接管。如果我按住左箭頭,並按下右箭頭,則沒有任何變化(我正在移動的區塊繼續向左移動)。我已經改變了關鍵字閱讀的順序,但沒有成功。javascript keydown事件的優先級是多少(如果有的話)?
我讀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;
}
};
你說的是兩個鍵同時關閉?瀏覽器的行爲是否相同?作爲一個測試,我建議你在'move()'和'update()'(首先測試'keyCodes [left]'值)中顛倒'if'語句的順序。看看是否改變了行爲。如果是這樣,問題在於你處理事件的邏輯。如果沒有,這可能是JS處理多次印刷(也可能是瀏覽器特定)時的某種模糊性。 –
是的,兩個按鍵同時按下。我嘗試過跨瀏覽器,並得到相同的結果,並改變處理的順序沒有幫助。 – Caleb
更正:重新排序它們會導致相反的情況發生。我以前在重新訂購時一定錯過了。謝謝你的幫助! – Caleb