Asignar Grupos en Godot

por Abr 29, 2018Godot Engine, Tutoriales2 Comentarios

En Godot podemos clasificar nuestras escenas en grupos, esto nos permite una buena forma de organización y manipulación de componentes específicos durante nuestro juego.

Podemos hacer grupos mediante código y también desde el editor de Godot. Vamos con eso:


Asignar grupos desde el editor

Hacemos clic sobre la escena que queramos y buscamos la pestaña «Grupos» dentro de la sección «Nodo», ubicada en la parte inferior del editor.

Colocamos un nombre y presionamos «Añadir». El grupo se colocará en una lista, no tenemos límites para añadir nuevos. Si queremos eliminar un grupo, sólo hacemos clic en la papelera que se encuentra al lado del nombre.


Asignar grupos desde código (GDScript)

Podemos administrar los grupos de un nodo desde cualquier script, veamos un ejemplo:

Estando dentro del script de Node, le asignaremos un grupo dentro de una función. La recomendada en _ready():

extends Node

func _ready():
	add_to_group("Niveles")

Ya agregamos el grupo, es más fácil que usar el editor. Podemos comprobar que formamos parte del grupo con una línea:

if self.is_in_group("Niveles"):
		print("Hola Mundo")

Cuando usamos self nos estamos refiriendo al mismo nodo que esta ejecutando el script. Con is_in_group() podemos preguntar si nos encontramos en el grupo indicado por el parámetro, devolverá un True o un False.

También podemos poner un nodo externo al Node, se hace así:

$Jugador.add_to_group("Jugadores")

Es lo mismo que con self, sólo que usamos la dirección de otro nodo.

Para remover un nodo con código, usamos:

$Jugador.remove_from_group("Jugadores")

Obtener nodos dentro de un grupo

Es probable que necesitemos saber que nodos se encuentran dentro de un determinado grupo. Para eso podemos hacer lo siguiente:

func _ready():
	$Jugador.add_to_group("Jugadores")
	print(get_tree().get_nodes_in_group("Jugadores"))

Primero usamos el get_tree() para entrar en el árbol de recursos, después indicamos el grupo en el que queremos buscar todos los nodos usando get_nodes_in_group().

En este caso sólo vamos a obtener el nodo que acabamos de añadir: KinematicBody2D.

¡Comenta! 👇️

2 Comentarios

  1. Juan Diego

    Vale, ya entiendo. Muchas gracias, lo deduje por mí mismo hace poco tras ver un video de «Escuela de juegos», pero igual me ayuda saber que no cometÍ horrores en el código (miento, sí los hice, pero en otras áreas). ¿Tienes algo para entender las grid? He visto varios tutoriales de esas cosas y siempre me confundo. Creo que es porque no entiendo las librerías, a tal punto que copié y pegué descaradamente esa parte al hacer «El juego de la vida» de Conaway. ¿Cómo harias un sistema de turnos? He pensado algo así para un quiz, tipo quien quiere ser millonario (o Majotori, aunque reconozco que la referencia anterior te simpatizará más como paisano), pero no sé si es lo más optimo y si podría implementarlo mejor que la última vez (variables globales… eso lo resume todo).

    Cuídate, de antemano te agradezco por responder. Ojalá no atravieses problemas de internet; a veces CANTV es mágico, aunque no en el buen sentido XD.

    Responder
    • César León

      Buenas noches Juan. Por fortuna tengo otro servicio de Internet jajaj. Un sistema de turnos… estaba desarrollando uno hace tiempo, cuando quería montar una campaña sobre juegos de estrategia. No pude terminarlo por todos los problemas del momento, pero básicamente hay que mantener un historial de todas las acciones, se me ocurre que un script global puede comprobar que todas las acciones se hayan realizado y puedan dar paso al turno de otro jugador (o la «Jugada» de la IA). ¿A qué tipo de grid te refieres?

      Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

¿Qué son los setters/getters en GDScript?

¿Qué son los setters/getters en GDScript?

En varios tutoriales donde hago uso de la palabra reservada "setget", dejo el enlace con la explicación de la documentación oficial sobre esa función. Sea porque en una que otra ocasión me haya olvidado de enlazar al manual, o todavía no se entienda bien, llegan...