Creación de Videojuegos. Godot Engine. Aspectos fundamentales de las escenas.

Tema 16. Godot Engine. Aspectos fundamentales de las escenas.

RENOMBRAR Y REUBICAR ESCENA

En este tema se van a explicar una serie de pasos muy importantes que son esenciales para el buen desarrollo de un proyecto. Es es caso de renombrar escenas o nodos para que podamos percibir mejor nuestra estructura de proyecto.

Recordamos que nuestro proyecto está formado por un Nodo2D al que hemos llamado Escena1.

Nodo2D al que hemos llamado Escena1. Godot
Nodo2D al que hemos llamado Escena1. Godot

Vamos a renombrar el Nodo Escena1 por Nivel1 y vamos a ver qué cambios debemos realizar:

Para ello, nos ponemos encima del Nodo y simplemente lo renombramos, pero si nos fijamos,

Renombramos el Nodo Escena1. Godot
Renombramos el Nodo Escena1. Godot

en la estructura de recursos, el archivo sigue llamándose como antes, Escena1.tscn

Al renombrar el Nodo, el archivo se sigue llamando como antes. Godot
Al renombrar el Nodo, el archivo se sigue llamando como antes. Godot

Por lo tanto, deberemos ir al archivo y proceder también a su modificación. Esto no es obligatorio pero sí muy recomendable. En una estructura con muchos más nodos puede llevarnos a mucha confusión si no lo hacemos. Por lo tanto es aconsejable hacerlo para evitar problemas tal y como vamos avanzando en nuestro proyecto:

Aquí vemos como coincide el nombre del Nodo con su fichero de Escena.

Archivo del Nodo renombrado igual que su Nodo en el árbol. Godot
Archivo del Nodo renombrado igual que su Nodo en el árbol. Godot

También es posible arrastrar el fichero Nivel1.tscn o Player.tscn a un nuevo directorio creado previamente. Siempre debemos organizar nuestro proyecto de la forma más estructurada posible.

ÁREA 2D Y SEÑALES

Un requisito indispensable en cualquier proyecto es la detección del personaje cuando pierde una vida. En este ejemplo, vamos a crear un nivel de plataformas en el que el personaje cae por una abertura y el programa detectará que el personaje muere.

Para ello, vamos a generar una abertura en nuestro escenario por donde caerá el personaje “en caída libre.”

Vamos a generar una abertura en nuestro escenario por donde caerá el personaje “en caída libre.” Godot
Vamos a generar una abertura en nuestro escenario por donde caerá el personaje “en caída libre.” Godot

Por lo tanto ahora será necesario introducir en nuestro escenario un nuevo elemento que contacte con nuestro personaje. En este ejemplo añadiremos dicho elemento debajo del precipicio.

Para este tipo de elementos de detección se utilizan los Nodos de Área2D. Permiten definir áreas invisibles al jugador. Creamos un Nodo Área2D hijo de la Escena Nivel1:

Nodos de Área2D. Godot
Nodos de Área2D. Godot

Una vez añadido el Nod Área2D es necesario añadir un Nodo de Tipo CollisionShape2D para la detección de colisiones y añadirle una forma al CollisionShape, en este caso un rectángulo.

Añadimos una colisión al Nodo Área2D. Godot
Añadimos una colisión al Nodo Área2D. Godot

Y arrastramos la forma al lugar indicado en nuestro escenario, en este caso lo situamos debajo del precipicio. Recordad que podemos redimensionar la forma.

Arrastramos la forma al lugar indicado en nuestro escenario, en este caso lo situamos debajo del precipicio. Godot
Arrastramos la forma al lugar indicado en nuestro escenario, en este caso lo situamos debajo del precipicio. Godot

Los Nodos Área2D trabajan con señales. Ahora trabajaremos con una señal para indicar que el personaje toca dicha área.

Iremos al Nodo Área2D y cambiaremos a la pestaña Nodos (ventana derecha) que tenemos al lado de la pestaña de las propiedades.

Los Nodos Área2D trabajan con señales. Godot
Los Nodos Área2D trabajan con señales. Godot

Ahora hay que indicarle que “un cuerpo” ha ingresado en su región. Seleccionamos con doble Click la función body_entered(body: Node)

Conectamos una función a un Nodo. Godot
Conectamos una función a un Nodo. Godot

y a continuación le indicamos qué “cuerpo” ha entrado en su área. En este caso deberemos conectarlo con el Nodo Player.

Conectar una señal a un Método:

Conectar una señal a un Método. Godot
Conectar una señal a un Método. Godot

Una vez conectada la señal, se crea una función en el Script del Player:

func _on_Area2D_body_entered(body):
pass # Replace with function body.

y es aquí donde le indicaremos qué es lo que deseamos que se haga cuando el Player ha entrado en contacto con el Área2D

En este tema, mostraremos un mensaje por Consola:

unc _on_Area2D_body_entered(body):
print(“EL PLAYER TOCA EL ÁREA”)

Probamos el proyecto  vemos que cuando el personaje cae y toca el Área2D se muestra el mensaje:

Observamos el mensaje por la Consola. Godot
Observamos el mensaje por la Consola. Godot
REINICIAR UNA ESCENA

En este tema veremos cómo modificamos el texto que se mostraba cuando el personaje tocaba el Área2D por un reinicio de escena.

En el motor de Godot existe una función que se utiliza mucho llamada get_tree() que gestiona la estructura de una escena del juego.

Usaremos un método de la función get.tree() para reiniciar la escena actual:

func _on_Area2D_body_entered(body):
get_tree().reload_current_scene()

Tal y como hemos implementado el código, funciona bien, pero hay un pequeño problema. Puede ocurrir que otro objeto que no sea el Player acceda o toque el Área2D, por ejemplo, imaginemos que un enemigo también pueda caer en el agujero y pueda tocar al Área2D.

Para asegurarnos que sea el jugador el que toque reinicie la escena cuando toque el Área2D podemos establecer una condición preguntando si es el Personaje el que ha tocado dicha área.

func _on_Area2D_body_entered(body):
if body == self:
get_tree().reload_current_scene()

Como el Área2D está conectada con el Player, cuando el cuerpo del Player sea él mismo identificará que es el Player el que ha tocado con el Área2D en caso de ser otro cuerpo la condición será falsa y no se ejecutará el reinicio de escena.

DUPLICAR ÁREAS 2D

Imaginad que ahora queremos hacer el mismo proceso, es decir, que el Player caiga por un agujero y se reinicie la escena, pero claro está teniendo varios agujeros. La forma más sencilla de hacer esto, es duplicando las Áres2D.

Para ello, lo primero que haremos será crear 3 huecos en los TileSets:

Si el Player cae por un agujero, se reinicia la escena. Godot
Si el Player cae por un agujero, se reinicia la escena. Godot

Ahora podemos Duplicar las áreas. Nota: Si renombramos las áreas con un número al final, Godot añade un número más al área duplicada, como un contador. Y lo hace de forma automática. Esto no es necesario pero puede ser útil.

Renombro mi Área2D a Area2D1 y la duplico 3 veces, nos ponemos encima y botón derecho del ratón Duplicar o CMD+D

Duplicamos el Área2D. Godot
Duplicamos el Área2D. Godot
Duplicamos el Área2D y automáticamente se renombra. . Godot
Duplicamos el Área2D y automáticamente se renombra. . Godot

Ahora si el personaje cae por cualquier agujero, la escena se reinicia. No hay que tocar el código.

El personaje cae, toca una Área2D y se reinicia la escena. Godot.
El personaje cae, toca una Área2D y se reinicia la escena. Godot.

ÍNDICE


0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x