Si estás diseñando un juego 2D de vista lateral, como un plataformas, lo más probable es que tu jugador necesite saltar (JUMP). Algo que se añade fácilmente asociando un comando JUMP a una pulsación de tecla concreta.
Ahora mismo, en nuestro juego tenemos unas cuantas líneas de código en el Player Event que gestionan el salto:
IF KEY FIRE JUMP 7 ENDIF
El “7” es la fuerza del JUMP; podemos cambiarlo por otro valor si queremos un salto más alto o más bajo.
Todo bastante sencillo.
Pero lo que quizá no sepas es que MPAGD también tiene dos variables adicionales del jugador con las que podemos trabajar para alterar cómo funciona el salto, o lo que el jugador puede o no puede hacer en el aire. Son:
AIRBORNE: vale 0 cuando el jugador está en el suelo y aumenta cuanto más tiempo está en el aire
JUMPSPEED: guarda un valor que controla la velocidad de ascenso/descenso. En el código podemos saber si el jugador está subiendo o bajando.
Vamos a probarlo. Primero creemos una pantalla de prueba sencilla. En tu editor de pantallas, crea una pantalla con un conjunto de wallblocks por todo el contorno. Luego asegúrate de añadir tu sprite de jugador con el Sprite Positions Editor.
Añade tu pantalla al Map y pulsa enter para convertirla en la pantalla inicial.
A continuación, abre el código de tu Player Event y añade el siguiente código encima del comando FALL:
IF KEY OPTION2
ADD 1 TO J
WHILE KEY OPTION2
ENDWHILE
IF J > 20
LET J = 0
ENDIF
ENDIF
AT 2 3
PRINT "JUMP:"
AT 2 13
DISPLAY TRIPLEDIGITS J
AT 3 3
PRINT "JUMPSPEED:"
AT 3 13
DISPLAY TRIPLEDIGITS JUMPSPEED
AT 4 3
PRINT "AIRBORNE:"
AT 4 13
DISPLAY TRIPLEDIGITS AIRBORNE
IF AIRBORNE <> 0
IF JUMPSPEED < 50
ADD 0 TO JUMPSPEED
ELSE
IF JUMPSPEED > 240
ADD 0 TO JUMPSPEED
ENDIF
ENDIF
ENDIFAhora ejecuta tu juego.
Cuando empiece, pulsa la tecla “2”. Deberías ver aumentar el valor JUMP: en la pantalla; ponlo en 10
Ahora pulsa tu tecla de salto (¡espacio!)
¡Un gran salto!
Sigue saltando y fíjate en cómo cambian los números de cada variable.
Mientras el salto del jugador asciende, JUMPSPEED aumenta empezando en 256 - FUERZA DE SALTO, así que si usas JUMP 10, JUMPSPEED empieza en 256 - 10 = 246
Recuerda que es un número de 8 bits, así que cuando llega a 255 y se incrementa de nuevo vuelve a 0. En términos de nuestro JUMP, cuando JUMPSPEED llega a 0 el jugador alcanza el punto más alto del salto y empezará a descender. Al descender, JUMPSPEED se incrementará de 0 hasta el valor de JUMP; cuando llegue (en nuestro ejemplo) a 10, el jugador habrá aterrizado.
AIRBORNE, en cambio, simplemente aumenta mientras el jugador está en el aire, empezando en 0 e incrementándose. Cuando AIRBORNE es 0 el jugador está en el suelo; con cualquier otro valor sabemos que está en el aire. Podemos aprovecharlo con una sentencia como IF AIRBORNE <> 0 (es decir, si el jugador no está en el suelo, haz algo); recuerda que <> significa “NO ES”
Para trastear con el JUMP, el código que te di arriba está preparado para que pruebes qué pasa si alteramos la velocidad a la que cambia JUMPSPEED:
IF AIRBORNE <> 0 ; player is in the air
IF JUMPSPEED < 50 ; is player descending?
ADD 0 TO JUMPSPEED ; if so change the rate of fall
ELSE
IF JUMPSPEED > 240 ; is player ascending
ADD 0 TO JUMPSPEED ; change the rate of ascent
ENDIF
ENDIF
ENDIF
Al cambiar el 0 en las partes resaltadas del código alterarás la velocidad de ascenso/descenso
Pruébalo; esto es lo que pasa cuando cambiamos la velocidad de descenso así:
ADD 5 TO JUMPSPEED
En este caso el ascenso es normal, pero el descenso es mucho más rápido.
Ten en cuenta que la rutina JUMP estándar de MPAGD es un salto estilo “Mario”: el jugador puede moverse y cambiar de dirección en el aire, no es un salto fijo tipo “Manic Miner”.
Recuerda: si tu juego incluye saltos (JUMP), asegúrate de tener una línea FALL en el código de tu evento del jugador, ¡o puede que nunca bajen!
