Hemos hablado de que hay acciones u órdenes como “caminar”, que tal vez por su complejidad no pueden resumirse a una sola línea, y por ello tienen otro par de sub-órdenes.
Imaginemos que tuviéramos las siguientes instrucciones para caminar:
MOVER PIE DERECHO
MOVER PIE IZQUIERDO
ANIMAR SPRITE
CALCULAR COLISIONES
Fíjate que lo podemos hacer en líneas separadas, sin que esté dentro de ninguna función, cada una puede ser una función. El problema es que si quiero que mi personaje camine desde la casa hasta el supermercado, va a tener un montón de pasos... ¿te imaginas poniendo este código mil veces?
MOVER PIE DERECHO
MOVER PIE IZQUIERDO
ANIMAR SPRITE
MOVER PIE DERECHO
MOVER PIE IZQUIERDO
ANIMAR SPRITE
MOVER PIE DERECHO
MOVER PIE IZQUIERDO
ANIMAR SPRITE
... (mil veces más)
No tendría sentido. Por ello es que podemos crear “funciones”, y no se limitan a una sola línea de código. Con esto quiero decir que podríamos crear una función llamada “Caminar”, que contenga estas 3 acciones como sub-órdenes:
MOVER PIE DERECHO
MOVER PIE IZQUIERDO
ANIMAR SPRITE
¿En qué se diferencia? En que si quiero que mi personaje camine hasta el supermercado, puedo aprovechar esta función y hacer la siguiente llamada u órdenes:
CAMINAR
CAMINAR
CAMINAR
CAMINAR
Cada vez que el código ejecute “Caminar”, irá a ver qué contiene esa función, y tal como habíamos dicho antes, al estar compuesta de otras sub-órdenes las ejecutará antes de ir a la siguiente.
Entonces, las funciones son muy útiles cuando se trata de acciones que vamos a repetir, cuyo contenido supera una sola línea. Podemos crear funciones para otras cosas, pero este te diría que es el uso principal de las mismas.
Creando Nuestra Primera Función en GDScript
Como todavía no sabemos hacer caminar a nuestro personaje, vamos a crear un ejemplo en donde la caminata sea de texto. Es decir, vamos a mostrar en pantalla el mensaje “mueve pie izquierdo”, “mueve pie derecho”, “animar sprite”. Más adelante vas a poder hacerlo con la caminata real, pero bueno, por algo hay que empezar... y no es poca cosa... así se hacían los primeros videojuegos de texto que fueron muy exitosos en otra época y en la cual era todo narrado por texto.
Vamos entonces al final del código de nuestro script, y en una línea sin tabular (borramos la tabulación si es que existe), vamos a crear nuestra primer función. ¿Cómo?... primero le pensamos un nombre... “caminar” estaría bien. La sintaxis para que pueda leerla la máquina en GDScript sería la siguiente:
func NOMBREDELAFUNCION():
Vemos que primero se escribe func
, indicando que se trata de una función, para que la máquina lo sepa. Junto a esta indicación ponemos el nombre que queremos. Para finalizar, como no recibirá ningún dato extra lo cerramos con paréntesis vacíos ()
.
Fíjate que al final le pusimos :
(dos puntos). Esto indica que lo que hay a continuación es el contenido de la función, o en otras palabras un bloque. Todo lo que esté a continuación le pertenece a esta función. En este caso va a contener las órdenes de mover pie derecho, mover pie izquierdo y animar un sprite.
Ponemos entonces debajo lo siguiente:
func caminar():
print("mueve pie derecho")
print("mueve pie izquierdo")
print("animar sprite")
Este código tiene que ir tabulado 1 vez hacia la derecha, para indicar que pertenece al bloque de arriba. Todo lo que está tabulado un bloque, pertenecerá a la función caminar()
que hemos creado.
Ejecutando la Función: El Sistema de Jerarquía
Ya tenemos nuestra función lista. Ahora puedes ir a la función _ready()
(o ready
), y darle la orden a la máquina para que ejecute caminar()
cuantas veces quieras. Para ello es suficiente con poner el nombre de la función y los paréntesis vacíos:
func _ready():
caminar()
caminar()
caminar()
Fíjate que estas llamadas, también tienen que estar tabuladas un espacio, pero en este caso para indicar que serán llamadas dentro de la función _ready()
.
Para que lo entiendas mejor, cada tabulación o bloque funciona como si fuera un árbol de jerarquías. Esto es importante porque en el futuro podemos ver cosas con más de una tabulación. ¿Cómo se interpretan?
Bueno, cuando algo (como una función) lleva :
(dos puntos) esto abre un bloque. Todo lo que va dentro de ese bloque tiene que ir tabulado una vez. Pero si dentro de ese bloque tuviéramos otra cosa que crea otro bloque, ese sub-bloque se tabulará 2 veces.
En resumen, el contenido de un bloque debe ir tabulado 1 vez más que lo que está tabulado su padre o creador. Por ejemplo, si vemos nuestra función caminar()
en donde la hemos creado, no tiene tabulación. Luego con :
abre un bloque, y todo su contenido “hijo”, se tabula 1 vez. Por lo tanto, caminar()
tiene tabulación cero, y el bloque hijo tiene tabulación 1. Si dentro hubiera otra cosa que creara un bloque, el contenido de ese bloque tendría tabulación 2.
Esto de tabular más de 1 vez lo veremos probablemente en el capítulo de condiciones, así que no te precipites, con tal de que entiendas cómo crear una función y usarla de forma correcta, hemos hecho un gran avance.
Extraído de mi libro "La Biblia de Godot (Nivel 2)", al cual podés acceder clickeando en la siguiente imagen:
0 Comentarios