Doble Salto en Juegos de Plataformas – Sunny Land en Godot

¡Hola amigos! En este turorial voy a explicarles cómo extender las funcionalidades de Sunny Land, el juego de plataformas que desarrollé hace unos meses, añadiendo la posibilidad de dos o más saltos en el personaje principal. Hago este tutorial porque un usuario me comentó que estaba intentando programar el doble salto del personaje y para ello había duplicado el estado de saltar en la Máquina de Estados.

Recuerden que en el proyecto de Sunny Land estamos desarrollando mecánicas generales que puedan adaptarse a nuestras necesidades, no hace falta duplicar el código, sólo trabajar sobre él, porque está preparado para eso.

Este tutorial también puede aplicarse en cualquier otro juego de plataformas, sólo sigan la lógica. Primero diríjanse a las variables del personaje, vamos a añadir dos nuevas: una que sea la cantidad de saltos disponibles y otra el número del salto actual. También necesitaremos que la velocidad de salto esté reducida, para que al saltar dos veces no volemos.

Ya que tenemos las variables preparadas, podemos entrar en el estado “Jump” donde definimos el salto del personaje. El cambio radica en que ahora en la función de inicio sólo reproducimos la animación y llamamos a una nueva función de salto. Antes el mismo salto estaba en el inicio, pero ahora que necesitamos repetirlo, podemos evitarnos duplicar código si hacemos una función en base a esas líneas.

Por lo tanto, en la función de salto están las líneas que antes se ubicaban en el inicio de ese estado, con la diferencia de que ahora sólo se ejecutan si el salto actual es menor que los saltos disponibles para el personaje. Y cada vez que se produzca el salto, sumamos una unidad al salto actual.

Creo que el problema que se les plantea a muchas personas, es que no podemos volver a saltar porque los saltos se efectúan desde el estado de movimiento y detenido… más abajo haremos uso de la función handle_input(event) para detectar en el mismo estado de salto si se presiona otra vez la flecha de arriba para llamar nuevamente a la función de salto (sin hacer un cambio en los estados). Como ya el salto actual es igual que los disponibles, no podemos saltar más.

En la función de update() que se ejecuta todo el tiempo, diremos que cuando toquemos el piso pasemos al estado de detenido y los saltos actuales vuelvan a 0, así de simple.

Antes de que me digan que tienen un problema al aplastar la cabeza de los enemigos, recuerden entrar otra vez en el script del jugador para indicar que cuando estemos aplastando a un enemigo, se reste un salto a la variable de “salto_actual” sí esta variable es igual a uno o es igual a dos. De esta forma cuando aterricemos en la cabeza de un enemigo, podremos volver a saltar sin importar que ya hayamos consumido los saltos actuales.

Sin más que decir, me despido. Muchas gracias a las personas que hacen donaciones y me apoyan en Patreon, hace poco se incorporó Fury Games a esta plataforma. Eso me ayuda a tener más Internet con la que publicar, pues aquí resulta muy costoso.