Cada nodo dispone de diferentes señales que le permiten crear condiciones especificas. Una característica muy importante para los nodos GUI, ya que pueden controlar mediante señales todo lo que hace el usuario. En resumen: las señales permiten avisar cuando sucede algo relacionado con el nodo.
Podemos emitir señales mediante código y también desde el editor de Godot. Vamos a hacer dos ejemplos:
Emitir señal desde el editor, usando un nodo «Area2D»
Para eso vamos a hacer clic sobre el nodo que necesita emitir una señal. Después buscamos en la pestaña “Nodo”, las señales.
Normalmente un Area2D es usada para detectar la entrada de otro nodo en ella. Vamos a añadir la señal de “mouse_entered()”, le hacemos doble clic.
En esta ventana tenemos que conectar la señal con un nodo que se encuentre dentro de la escena y tenga un script. Las letras rojas marcan al nodo que emite la señal.
NOTA: podemos conectar una señal en el script del mismo nodo que emite la señal, aunque en este tutorial lo conecto con el Node.
En la última línea del script que seleccionamos (en mi caso: Node), vamos a encontrar esto:
func _on_Area2D_mouse_entered():
pass # replace with function body
Cada vez que el mouse toque la máscara del Area2D, la función se ejecutará. Voy a poner lo siguiente:
func _on_Area2D_mouse_entered():
print("Hola Mundo")
Como resultado, tendríamos lo siguiente en la consola:
Emitir señal mediante código, usando un nodo «Button»
Para hacerlo, es recomendable que entremos en un nodo principal. Desde ahí podemos emitir señales tanto en el nodo portador del script, como con escenas externas.
Tengo lo siguiente:
Suponiendo que nos encontramos en un nodo padre, vamos a obtener a un botón hijo de la siguiente forma:
func _ready():
var boton = $Boton
También podemos hacerlo así:
onready var boton = $Boton
Con el primer método, sólo vamos a poder usar la variable «boton» dentro de la función «_ready()». El segundo es mas global y nos permite manipular el nodo desde otras funciones del script.
Ahora, es momento de conectar nuestro botón. Para eso:
func _ready():
boton.connect("button_down",self,"presionado")
Voy a explicar los parámetros del método connect:
- «button_down»: cada nodo tiene una lista con sus señales disponibles, en el primer parámetro tenemos que colocar la señal que queremos conectar. Siempre se activa un auto-corrector que les puede ser de utilidad para buscar la señal que necesitan.
- «self»: el segundo parámetro es para señalar el nodo donde se esta conectando la señal. Si usamos «self» estamos diciendo que sea en el mismo nodo que estamos usando (Node), también podemos colocar una variable que tenga almacenada una escena externa.
- «presionado»: el tercer parámetro es el nombre de la función que se activará cada vez que el botón sea presionado (button_down).
Tenemos que crear la función «presionado». Cada vez que la señal se emite, se busca en el script del objeto que seleccionamos en el segundo parámetro, la función que indiquemos como tercer parámetro (en nuestro caso: «presionado»).
Más abajo voy a poner esto:
func presionado():
print("Hola Mundo")
Ya terminamos esta introducción a las señales. Si tienen una duda, pueden dejarla en los comentarios.
Me estás ayudando muchísimo con todos estos artículos, son útiles y didácticos. Gracias!