45. Salto hacia los lados.

Ahora mismo, nuestro personaje puede saltar. Además, si mantenemos pulsada una flecha hacia un lado mientras saltamos, el personaje saltará hacia ese lado.

Pero eso tiene algunos efectos laterales no deseables:

  • Podemos movernos hacia un lado y hacia otro mientras salta, consiguiendo que el personaje cambie de dirección en el aire, algo que resulta "poco real" y que la mayoría de juegos no permite.
  • Si pulsamos la flecha arriba, podemos encadenar varios saltos, y así alcanzar alturas mucho mayores.

Esos efectos son fáciles de evitar. Los métodos "MoverArriba" y similares del personaje deberán comprobar primero si está saltando, para no permitir que se mueva en ese caso:

public void MoverArriba()
{
    if (saltando)
        return;
 
    SiguienteFotograma();
    y -= incrY;
}

Pero querremos permitir que sí se pueda saltar hacia el lado, de forma más controlada. Para eso, podemos crear un método "SaltarDerecha" y otro "SaltarIzquierda", que añadan un movimiento horizontal al salto:

public void SaltarDerecha()
{
    saltando = true;
    incrXsalto = 4;
}

Mientras que en el "Saltar" (en vertical) habrá que dejar claro que no habrá movimiento horizontal:

public void Saltar()
{
    saltando = true;
    incrXsalto = 0;
}

Y si queremos que se pueda saltar a derecha e izquierda, deberemos comprobar desde "Partida" si se pulsan simultáneamente las teclas de salto y las de desplazamiento:

public void ComprobarTeclas()
{
    // -- Leer teclas y calcular nueva posición --
    if (Hardware.TeclaPulsada(Hardware.TECLA_ESC))
        partidaTerminada = true;
 
    if (((Hardware.TeclaPulsada(Hardware.TECLA_DER)
            && Hardware.TeclaPulsada(Hardware.TECLA_ESP)))
        || (Hardware.JoystickDerecha() && Hardware.JoystickPulsado(0)))
        miPersonaje.SaltarDerecha();
 
    else if (((Hardware.TeclaPulsada(Hardware.TECLA_IZQ) 
            && Hardware.TeclaPulsada(Hardware.TECLA_ESP)))
        || (Hardware.JoystickIzquierda() && Hardware.JoystickPulsado(0)))
        miPersonaje.SaltarIzquierda();
 
    ...    

(Eso habrá que hacerlo antes de comprobar cada una de las teclas individuales).

Si quieres contrastar tu versión con la "oficial", puedes descargar todo el juego, con fuentes y ejecutable.

Ejercicio propuesto: Rediseña los niveles, de modo que se puedan recorrer saltando.