4

キーダウン イベントを読み取り、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;
    }
};
4

1 に答える 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;

    ...
于 2013-08-02T14:13:55.557 に答える