sábado, 19 de octubre de 2019

Cómo instanciar una escena por código

Instanciar escenas por código es una de las maneras más comunes que todo desarrollador debe realizar, esto agiliza mucho el desarrollo del juego ya que por ejemplo si creas balas o enemigos entonces en lugar de estar creando un montón de escenas repetidas, simplemente creas la escena del enemigo o la bala y luego desde el nodo en que la necesites la puedes instanciar y crear tantas como necesites.

Supongamos que tenemos una escena llamada bullet (bala).



Primero cargamos la escena con load("ruta de la escena") para luego agregarla al Nodo deseado (puede ser un contenedor para balas o el mismo nodo que genera las balas, es decisión tuya).

Instanciando con (PackedScene)

Esta es quizá la forma más usual de instanciar escenas ya que se puede hacer vía Inspector. Sin embargo no siempre tenemos las escenas prefabricadas o disponibles para arrastrar y soltar desde el editor, es este caso es mejor usar la primera opción.

Liberar un Nodo de forma segura

Simplemente con colocar Nodo.free() ya se elimina el nodo de la escena junto con todos sus hijos.

Pero ¿Qué pasa si eliminamos un nodo que actualmente estaba emitiendo una señal o invocando una función en ese momento?

Esto hace que se cuelgue el juego y termine inesperadamente o sucedan cosas que normalmente no deberían suceder. (glitch)

La forma más eficiente de liberar un Nodo de forma manual, es usando queue_free() ya que aquí le estamos diciendo a GODOT que sea él quien se encargue de eliminar el nodo cuando lo considere necesario (normalmente lo hace cuando ya ha terminado de ejecutarse el fotograma actual)

Cómo agregar Nodos mediante código

En este ejemplo voy a crear un Sprite como hijo de un Button y le cargare la textura del icono de GODOT.



Al darle click al Button se obtiene el siguiente resultado: