pixelboyz logo
Desarrollo de Videojuegos

Tutorial de Godot Engine Parte 6: manejo de múltiples escenas y datos globales

image

Índice de contenido


Hasta este punto de la serie, solo hemos creado juegos de una sola escena. En cualquier aplicación no trivial, a menudo querrás tener varias escenas para formar tu juego. Por ejemplo, puede tener una escena para su pantalla de título/introducción, luego un menú principal, luego un juego y finalmente una escena de fin del juego. Hoy vamos a ver cómo hacer exactamente esto. También vamos a ver cómo compartir información entre esas escenas.

esta escena es disponible como video HD aquí.

Creación de varias escenas

En primer lugar, siempre debe tener al menos una escena para comenzar. Avancemos y creemos uno, la pantalla de título parece bastante lógica. Cree una escena que dibuje un gráfico simple, llámela «title_scene.scn» y configúrela como su escena de inicio. Si no está familiarizado con este paso, consulte las secciones anteriores del tutorial. Una vez completado, debería verse algo como esto:

A continuación, queremos crear una escena a la que hacer la transición. Llamé al mío game.scn. Puede que no sea completamente obvio, pero en realidad cierras tu escena para crear la nueva escena. Seleccione Escena->Nueva Escena:

Luego diga sí al cuadro de diálogo aterrador que aparece (por supuesto, asumimos que ha guardado su escena y ya la ha configurado como la escena de inicio):

imagen

Ahora, en la segunda escena, acabo de crear un Panel simple, con un par de controles de etiquetas, así:

imagen

Realmente no importa lo que hagas. Las etiquetas son solo para mostrar que la información se puede compartir entre escenas. Nuestro juego en realidad no va a hacer nada.

Bien… ahora tenemos nuestras dos escenas… ¿cómo las conectaremos todas juntas? Bueno, eso requiere un guión. Vuelva a abrir la escena title_scene.scn. Hay una práctica opción de menú Abrir escena anterior, o puede usar Abrir escena…

imagen

Adición de un guión para controlar el cambio de escena

Ahora que tenemos nuestra escena original seleccionada, necesitamos agregarle un guión. Para hacer esto, cambie a la pestaña Recursos y seleccione el icono Nuevo recurso:

imagen

Para tipo seleccione GDScript:

imagen

Llamé al mío ‘global.gd’.

Ahora escribimos nuestro script. Vamos a cargar esto automáticamente como un nodo en nuestro juego cuando se inicie nuestra aplicación, por lo que debemos heredar de Node o una clase derivada de Node. En mi caso usé node. Puede heredar una clase usando la palabra clave extends.

Aquí está el código para nuestro sencillo script Node. Creamos una función para que las escenas puedan cambiar entre escenas y demostramos obtener una variable de sesión, así como establecer una variable global.

extends Node
#The currently active scene
var currentScene = null
#just some data for our game.  It could be HPs, Alignment, Direction, etc...
var PlayerName = "Mike"

func _ready():
   #On load set the current scene to the last scene available
   currentScene = get_tree().get_root().get_child(get_tree().get_root().get_child_count() -1)
   #Demonstrate setting a global variable.
   Globals.set("MAX_POWER_LEVEL",9000)
   
# create a function to switch between scenes 
func setScene(scene):
   #clean up the current scene
   currentScene.queue_free()
   #load the file passed in as the param "scene"
   var s = ResourceLoader.load(scene)
   #create an instance of our scene
   currentScene = s.instance()
   # add scene to root
   get_tree().get_root().add_child(currentScene)   
   
#simple accessor function to retrieve playerName   
func getPlayerName():
   return PlayerName

Script de carga automática al inicio

Asegúrese de guardar su script recién creado. Ahora queremos configurarlo para que esta pantalla se ejecute automáticamente cuando se inicia nuestro juego.

Para ello, vaya a Escena->Configuración del proyecto.

En el cuadro de diálogo resultante, desea seleccionar la pestaña Carga automática. Ahora especifica el script que desea cargar automáticamente y el nombre con el que desea que se conozca el nodo. Por cierto, esto distingue entre mayúsculas y minúsculas.

En la ruta, seleccione su global.gd recién creado. En Nombre de nodo, llámelo global y luego haga clic en Agregar:

imagen

¡Ahora este script se ejecutará automáticamente cuando se inicie su juego o aplicación!

Ahora que podemos cambiar de escena, hagámonos de esta habilidad. En su proyecto title_scene.scn, adjunte un script a la imagen que utilizó. Personalmente, utilicé un TextureFrame para mantener mi pantalla de título. Simplemente vamos a verificar si el usuario presiona el botón izquierdo del mouse y, si lo hace, vamos a cambiar de escena.

extends TextureFrame
func _ready():
   set_process(true)
   
func _process(delta):
   if(Input.is_mouse_button_pressed(BUTTON_LEFT)):
      get_node("/root/globals").setScene("res://game.scn")

Como puede ver, puede acceder al script al obtenerlo como un nodo usando el nombre que proporcionó en el cuadro de diálogo AutoLoad. Una vez más, este valor distingue entre mayúsculas y minúsculas y debe incluir la parte /root/.

Entonces, una vez que hagamos clic en nuestra imagen de título, debería cargar nuestra otra escena. Vamos a añadirle un poco de lógica. Cargue el archivo game.scn (sí, desearía que hubiera un modo de proyecto que evitara este cambio entre escenas), adjunte un script y agregue el siguiente código:

extends Panel

func _ready():
   var name = get_node("/root/globals").getPlayerName()
   get_node("Label").set_text(str(name, " is the greatest player ever!"))

   var powerLevel = Globals.get("MAX_POWER_LEVEL")
   get_node("Label2").set_text(str("Maximum power level is ", powerLevel))

Este código ilustra conceptos demasiado simples… llamando a una instancia global (Singleton en el lenguaje de Godot por cierto), como setScene() o getPlayerName() o llamando a una variable global. Ambos métodos hacen que sea muy fácil compartir datos entre varias escenas, lo que constituye esencialmente la columna vertebral de su aplicación.

El video




Source link

Tags :
datos,Engine,escenas,globales,Godot,manejo,múltiples,parte,Tutorial

Comparte :

Deja un comentario

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