sábado, 19 de octubre de 2019

Cómo obtener todos los nodos de un grupo

Los Nodos pueden ser agrupados bien sea desde el editor o por código, esta es una forma efectiva para tratar con muchísimas escenas a través de su agrupación.

Un ejemplo de asignación de grupo mediante el editor sería el siguiente:



Podemos observar que en la pestaña Node->Groups se pueden asignar tantos grupos como necesitemos en nuestra escena, para este caso he creado el grupo guardias para el Nodo Guardia1 y Guardia2 que derivan de un Label.

Ahora si quieres hacer lo mismo por código entonces deberías obtener primero el Nodo Label y luego llamar a su función add_to_group("nombre_del_grupo")



En el código anterior he asignado el grupo "guardias" al Label y luego imprimo su valor por la consola para verificar si se ha ejecutado bien.



Obteniendo la lista de nodos de un grupo

Esta parte es muy importante por si en algún momento dado de nuestro juego necesitamos alterar algún comportamiento de todos los Nodos pertenecientes a un mismo grupo. Podemos hacerlo vía código de la siguiente manera:


En la línea 6 hemos llamado a la función get_nodes_in_group() del SceneTree y este devuelve un array con toda la lista de nodos pertenecientes al grupo pasado como argumento. Si el grupo no existe entonces devolverá un array vacío [].

Luego ya puedes hacer quieras con los nodos referenciados en el array enemigos.

Llamando a todos los nodos de un grupo

Si por ejemplo quieres alertar a todos los Nodos de un grupo (por ejemplo: tu jugador ha activado una alarma en el juego) entonces debes hacer uso de los CallBacks que ofrece godot para notificar a todos los Nodos de un grupo haciendo uso de la función: 

call_groups("nombre_grupo", "funcion_callback")

Ejemplo:


Aquí he alertado a todos los Nodos con el grupo "guardias". Cada instancia del enemigo posee una función llamada _jugador_descubierto y en ella el enemigo puede hacer cualquier cosa como por ejemplo acercarse al jugador y arrestarlo.

En este ejemplo solo he puesto un mensaje en cada instancia del enemigo:














No hay comentarios:

Publicar un comentario