Posted February 11, 2021 by 3mb3_r
Las funciones y variables son dos de los conceptos más básicos de cualquier lenguaje de programación. Hasta ahora hemos usado funciones que ya estaban creadas, nosotros no hemos escrito que hace PRINT() ni los parámetros que dicha función acepta. Sin embargo, una parte fundamental para programar en general es aprender cómo escribir nuestras propias funciones.
En LUA podemos escribir nuestras propias funciones de la siguiente forma:
Hemos modificado nuestro código del ejemplo anterior de la siguiente forma:
Una función ejecuta cualquier bloque de código que se encuentre entre su declaración y el END.
Sin embargo, esto no es todo, una vez declarada y definida nuestra función hay que llamarla para que se ejecute. De hecho, si haces un RUN de nuestro anterior script no va a suceder nada. Hay que lanzar la función. Esto se hace del siguiente modo:
Ahora sí, nuestra función se va a ejecutar. Cuidado aquí hay 2 puntos importantes:
Para mostrar un poco el último punto Vamos a llamar 3 veces la función y ejecutar nuestro programa:
Espero que se haya entendido el concepto de las funciones, porque ahora, mirando ya a PICO-8 y al desarrollo de los videojuegos vamos a hablar de las 3 funciones vitales propias de PICO-8 y que van a estar presentes en todos nuestros juegos ya que nos permiten controlar el flujo del juego:
Vamos a usar las 3 tal y como estaban en los ejemplos, mira lo que ocurre al ejecutar:
Si seguimos el flujo, lo primero que se ejecuta es _init por lo que la pantalla se limpia de todo texto que se mostrará anteriormente. Siguen a la ejecución _update y _draw lo que hace que la palabra update y el corazón se impriman infinitamente por pantalla mientras dure la ejecución del programa. Podemos imaginar por el funcionamiento de estas funciones que el corazón al no cambiar de posición o dato en realidad solo es procesado una vez y se queda mostrándose en pantalla mientras que el comando de print update se ejecuta cada vez.
Normalmente la definición de variables en programación suele ser algo parecido a contenedores de datos en algún formato concreto. Pueden entenderse como cajas, no físicas, sino virtuales, que pueden guardar números enteros, cadenas de caracteres, decimales, valores booleanos, etc. Podemos almacenar lo que queramos en una variable, el nombre de nuestro personaje principal, su sprite, los puntos de vida que tiene, etc. Por ello las variables pueden llegar a ser bastante complejas.
También es relevante que entendamos, especialmente en un entorno de desarrollo de videojuegos, que las variables son útiles porque pueden cambiar (¡variar! bles), no tienen porque ser valores estáticos sino que se pueden modificar a través de nuestro código. Será de hecho así, como podremos hacer por ejemplo que un objeto o personaje se mueva en la pantalla.
¡Vamos, pues! a crear nuestras primeras variables. La creación de una variable se distingue en dos partes:
Al contrario que otros lenguajes de programación LUA no requiere distinguir el tipo de dato que introducimos al definir la variable. Por lo que podemos declarar una variable y definir sencillamente del siguiente modo:
Si es importante que seas consciente de que no es lo mismo guardar un número que una cadena de texto o string o bien un valor booleano. A la hora de compilar nuestro programa, aunque LUA sea flexible en este sentido, si podemos tener problemas al mezclar varios tiempos de variables.
¿Para qué hemos hecho esto? Bien vamos a recuperar nuestra línea de código que era el corazón. Vamos a sustituir los datos introducidos como parámetros dentro del print por los nombres de nuestras variables. Observa qué sucede:
Vamos a conjuntar lo que hemos aprendido sobre funciones y variables para modificar nuestra variable y alterar la posición de nuestro corazón. Usando la función _update, que sabemos que se ejecuta en cada frame del juego. Vamos a usar una variable dentro del método para que en cada frame variamos su valor por +1. Para ello tenemos que sumar asignar a esa variable la propia variable y sumarle + 1 a cualquiera que sea el valor de esta.
Se que es un poco confuso pero espero que con el ejemplo quede claro:
Es importante que pongas el cls() en draw, si en cada frame no limpiamos la pantalla empezaremos a copiar nuestro corazón sin borrarlo en la nueva coordenada creado un efecto bastante curioso. Pruébalo si quieres.
El resultado de ejecutar este código debe ser un corazón rojo que se mueve en diagonal (estamos moviendo nuestro corazón ambos ejes a la vez) y se va de la pantalla:
Código completo:
color_♥ = 8 texto = "♥" m_x = 10 m_y = 10 function _init()
end function _update() m_x = m_x + 1 m_y = m_y + 1 end function _draw() cls() print(texto, m_x, m_y, color_♥)
end |
¿Por qué no pruebas a cambiar el color también del mismo modo y ver que pasa? ¿O a cambiar el incremento que reciben las variables? ¿o quizá a quitar ahora sí, el cls() y ver que sucede?
¿Entiendes porque el corazón se repite? o porque cambia de color constantemente? Si es así mi misión para este post ha finalizado :) y ¡hemos creado nuestro primer objeto en movimiento!