Skip to content

Limitación del evento “keydown” con 3 teclas pulsadas simultáneamente

by Pere Monfort on July 28th, 2012

Me he encontrado ante un caso curioso: Estaba programando el movimiento de un personaje basándome en el evento “keydown“. Generalmente no es necesario, pero esta vez necesitaba tener en cuenta todas las opciones posibles de teclas. Para que os hagáis a una idea, un poco de pseudo-código:

if (!bRight && !bLeft && !bUp && !bDown) {
    // Not move.
} else if (bRight && !bLeft && !bUp && !bDown) {
    // Move Right.
} else if (!bRight && bLeft && !bUp && !bDown){
    // Move Left.
} else if (!bRight && !bLeft && !bUp && bDown) {
    // Move Down.
} else if (!bRight && !bLeft && bUp && !bDown) {
    // Move Up.
} else if (bRight && !bLeft && !bUp && bDown) {
    // Move Right-Down.
} else if (bRight && !bLeft && bUp && !bDown) {
    // Move Right-Up.
} else if (!bRight && bLeft && !bUp && bDown) {
    // Move Left-Down.
} else if (!bRight && bLeft && bUp && !bDown) {
    // Move Left-Up
} else if (bRight && bLeft && bUp && !bDown) {
    // Move Up.
} else if (bRight && bLeft && !bUp && bDown) {
    // Move Down.
} else if (bRight && !bLeft && bUp && bDown) {
    // Move Right.
} else if (!bRight && bLeft && bUp && bDown) {
    // Move Left.
} else if ((!bRight && !bLeft && bUp && bDown) || (bRight && bLeft && !bUp && !bDown)) {
    // Not Move.
}

Imaginemos que tenemos una función que se ejecuta cada vez que el usuario aprieta una tecla y hace lo siguiente:

// PSEUDOCODIGO.
function keyDownHandler (KEYDOWN) {
     if (KEYDOWN === "A") {
        bLeft = true;
    }
    if (KEYDOWN === "D") {
        bRight = true;
    }
    if (KEYDOWN === "S") {
        bDown = true;
    }
    if (KEYDOWN === "W") {
        bUp = true;
    }
}

Pues bien, si pulsaramos “W“, sin dejar de pulsar “W” pulsaramos “S”, y sin dejar de pulsar “W” y “S” pulsaramos “D” o “A” , lo esperado es que el primer condicional nos retornara “left” o “right”… peeeero TACHAN! El evento “KEYDOWN” no se ejecuta en el momento de apretar la tercera tecla “D” o “A”! Pero, si teniendo pulsadas “W” y “S” , pulsamos “M” o “N”, el evento SÍ se ejecuta.

Es decir, parece ser que según qué combinación, no es posible pulsar 3 teclas simultáneamente… sin duda alguna, una limitación a tener en cuenta!

From → Desarrollo

No comments yet

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS