Intermedio
Godot. Crear un ítem recolectable
Para dar mayor jugabilidad a nuestros juegos, a veces es interesante añadir items u objetos que el jugador pueda recoger para incrementar sus habilidades en el juego.
En este mini tutorial vamos a dar las claves para crear un ítem para que nuestro jugador, en nuestro caso una nave, pueda recogerlo y le incremente alguna de sus habilidades. En este caso será un escudo y enseñaremos como recoger el ítem y activar el escudo.
El primer paso es crear la escena que corresponda a nuestro ítem.
Godot. Abrir un fichero
En nuestros juegos, a veces es imprescindible tener ficheros de recursos con datos.
En esta píldora vamos a ver como abrir un fichero y leer los datos que hay dentro.
En nuestro caso el fichero all_words.txt esta en la carpeta assets y es una lista de palabras separadas por coma.
Para leerlo primero tenemos que abrir el fichero indicando que solo queremos leer los datos.
file = FileAccess.open("res://assets/all_words.txt", FileAccess.READ)
El siguiente paso es convertir el fichero en texto con la función get_as_text
Godot. Función call_group
Cuando estamos desarrollando nuestro juego, a veces podemos querer ejecutar una misma acción para una serie de elementos u objetos.
Por ejemplo, se ha acabado un nível y queremos eliminar todos los objetos enemigos, o bien hemos acabado un puzzle y queremos ocultar todos los botones, etc.
Para hacer esto podemos utilizar el sistema de grupos de Godot.
Para ello primero tenemos que ir a cada objeto y añadirle el grupo, para ello iremos al dock donde esta el inspector y nos moveremos a la pestaña de Node, donde encontraremos la subpestaña de Groups
Godot. Funciones Lambda
Una función Lambda o expresión Lamba, son pequeñas funciones sin nombre que se definen en línea. Se utilizan, no solo en Godot, si no en muchos lenguajes, para realizar tareas sencillas y se pueden pasar como argumento a otras funciones o almacenarse en una variable.
En GDScript las lambdas son Callables personalizados que no estan asociados a ningún Objeto.
Vamos a ver un ejemplo donde quedará más claro
La función dot
La funcion dot es una función de los Vectores, en este caso vamos a ver en el caso de un vector de 2 dimensiones (Vector2).
Esta función sirve para calcular el producto escalar de dos vectores. Esta es una operación matemática que combina dos vectores en un solo valor.
El producto escalar se define como :
Diferencias objetos por metodos
A veces en nuestro código tenemos funciones a las que le pueden llegar diferentes objetos/ nodos, por ejemplo un signal que nos indique que un objeto ha entrado en nuestra zona.
En el ejemplo que comentamos, podriamos tener una función asociada al "body_entered" y queremos saber que tipo de Node2D ha entrado en nuestra zona.
Para ello podemos utilizar diferentes formas pero una de ella, es mirar si el objeto que nos llega (body) tiene una función en concreto, y luego podemos mirar lo que nos devuelve esa función.
Añadir un get o un set
Cuando creamos una variable en alguna de nuestras escenas quizas queremos definir unas funciones get y set.
Con los get y los set podemos acceder al valor de la variable (get) o escribir un nuevo valor en la variable (set) mediante funciones, y no accediendo a la variable. Esta manera de trabajar es muy comun en programación y nos permite poder tratar los datos de nuestra variable tanto a la entrada como a la salida.
Connectar señales (signals) a funciones
Las señales (signals) se utilizan en Godot para que los objetos se puedan comunicar entre ellos sin necesidad de que existan referencias entre ellos.
Aquí vimos como crear y emitir señales.
Ahora conectaremos nuestra señal con una función:
Cambiar la animación de un sprite
Si estamos desarrollando un juego en 2D y tenemos una escena con un sprite de tipo AnimatedSprite2D y tenemos diferentes animaciones, por ejemplo una para que nuestro sprite corra, otra para la posición de reposo, otra para disparar u otra para morirse, y queremos que se active por código alguna de estas animaciones en concreto lo que tenemos que hacer es lo siguiente.
Primero de todo, en nuestro script, vinculado a la escena en la que tenemos nuestro sprite, vamos a declarar una variable para recuperar nuestro sprite node