En algunas situaciones, tener una, dos, tres o algunos pares de variables por separado está bien, pero hay otras veces que nos vendría bien tener todo mejor organizado o accesible en una especie de lista. Un Array es justamente una colección o una especie de lista que nos va a servir para guardar dentro muchas variables o valores.

El Problema de las Variables Separadas

Imagina por un momento que estuviéramos en un juego donde el personaje tiene una mochila o inventario, y a cada “slot” o casillero le vamos a dar un valor. Si vale cero (0), es porque allí no hay ningún item, y si no, le asignaremos un valor que lo identifique (1 para Manzana, 2 para Navaja, etc.).

Si la mochila tuviera 5 casilleros, tendríamos algo como:

GDScript
var mochilaSlot1 = 0
var mochilaSlot2 = 0
var mochilaSlot3 = 4
var mochilaSlot4 = 0
var mochilaSlot5 = 4

En este caso quizás no tan abultado. Pero ¿qué tal si la mochila tuviera 100 casilleros? Tendríamos que crear 100 variables distintas para cada slot. Además, si queremos chequear si la mochila tiene un objeto en específico, tendríamos que comprobar con los nombres de las 100 variables... no es para nada práctico y poco automatizado.

Ahí es donde entran en juego los Arrays. El Array es uno de los más útiles y sencillos de comprender dentro de Godot.


Creando y Definiendo un Array

Un Array es un solo elemento que contiene un conjunto de datos guardados en diferentes slots. El mejor caso para ejemplificarlo es una columna en Excel o cualquier programa de hoja de cálculo. Los arrays pueden almacenar cualquier tipo de variable.


En Godot, crear una variable mochila con esos elementos, se haría de esta forma:

GDScript
var mochila = [0, 5, 3, 0, 3, 0]

Como vemos, se usa una especie de corchete [], separando dentro de él los elementos con coma.

También podríamos, en lugar de guardar números, guardar el nombre de cada elemento en cada slot (String):

GDScript
var mochila = ["vacío", "botella", "cascara de banana", "vacío", "cáscara de banana", "vacío"]

El Secreto del Índice (Index 0)

Supongamos que el jugador presiona un botón que accede al primer elemento de la mochila y lo equipa. ¿Cómo podemos obtener el valor de ese elemento?

Cuando nosotros guardamos valores dentro de un array, es como si se guardaran dentro de slots o casilleros. Cada slot se lo identifica por un número llamado índice o index.

En datos "String" sería:


En programación, en lugar de empezar por el número “1”, se suele empezar por el número “0” como índice. El número 0 será siempre el índice del primer elemento de un array o lista.


Accediendo a un Valor

Para obtener un dato de un array, le tenemos que decir cuál es el número de dato que deseamos obtener, es decir, qué índice. Por ejemplo, si queremos el primer objeto del array mochila, haríamos:

GDScript
mochila[0]

Como ves, ponemos entre corchetes el valor al que deseamos acceder. Si quisiéramos mostrar dicho valor en pantalla:

GDScript
print(mochila[0])

¡Cuidado! Es muy vital entender esto de los índices. Si intentamos acceder a un índice que “no existe” (ejemplo: un array de 5 espacios e intentamos acceder al índice 8), podemos obtener datos basura o hacer crashear al juego (nuestro primer bug).


Recorriendo el Array con el Bucle for

Supongamos que la idea de nuestro juego es que si en algún slot de la mochila tenemos una antorcha, se haga visible la luz. Podríamos crear cien condiciones, pero eso es impráctico para una mochila de 50 slots.

Por ello, cuando queremos recorrer los elementos de un Array o de una lista, lo que hacemos es usar el ya visto bucle for.

GDScript
# Supongamos que inventario es: [6, 0, 0, 2, 0] donde 2 es la Antorcha.
var inventario = [6, 0, 0, 2, 0] 

# 1. Definimos el bucle
for i in inventario.size():

Aquí lo que estoy haciendo es decir que la cantidad de veces que ejecutaremos el bucle, equivale a inventario.size(). size() es una función que tienen los Arrays que nos devuelve el número de slots (su tamaño). En nuestro caso, size() devuelve 5, así que se ejecutará 5 veces.

Vamos a mostrar el contenido para que veas cómo funciona:

GDScript
for i in inventario.size():
    print(inventario[i])

Lo que hicimos fue acceder al índice número i de inventario. En la primera vuelta, i vale cero, por lo tanto accedemos al primer valor. Luego i vale uno, y accedemos al segundo valor, y así sucesivamente.

Condicionando y Optimizando con break

Entendido esto, vamos a condicionar para que si uno de los valores es la Antorcha, se haga visible el nodo Light2D:

GDScript
for i in inventario.size():
    if inventario[i] == 2: # Asumiendo que 2 es la Antorcha
        $Light2D.visible = true
        # OPTIMIZACIÓN: Cortamos el bucle, ¡ya encontramos la antorcha!
        break 

Aquí se ejemplifica que si hallamos el objeto buscado, hemos activado la luz y luego usado break (romper) para terminar de inmediato con el bucle y continuar con el resto del código. Esto mejora el rendimiento, ya que no tiene sentido seguir revisando los 45 slots restantes.


Extraído de mi libro "La Biblia de Godot (Nivel 2)", el cual podes encontrar clickeando en la imagen: