キーダウン イベントを読み取り、HTML キャンバス上の動きに変換する単純な JavaScript プログラムを作成しようとしています。私はこれまでかなり大きな成功を収めてきましたが、矢印キーの優先順位に奇妙な問題があります。何が起こるかというと、右矢印を押したまま左矢印を押し下げると、左矢印が引き継ぎます。左矢印を押したまま右矢印を押しても、何も変わりません (移動中のブロックは左に移動し続けます)。キーダウンが読み取られる順序を切り替えましたが、成功しませんでした。
キーダウンとキーアップを読み取るための私のコードは次のとおりです。
//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;
};
なぜ左のキーが右のキーよりも優先されるのか、誰かがわかるか、またはすでに知っている人はいますか?
解決済み:
修正された move 関数は次のとおりです。
function move () {
if (keyCodes[left] && velX > -12.0) {
velX -= 2.0;
}
if (keyCodes[right] && velX < 12.0) {
velX += 2.0;
}
};