Elije tu propia aventura
En este juego iremos pulsando en areas de la pantalla que cargarán nuevas escenas.
Esta forma de jugar es similar a lo que hace un usuario interactuando con los menús de un videojuego y por tanto sería más apropiado resolver el juego utilizando una escena de tipo User Interface.
Pasos de resolución
Definimos la estructura de la primera escena
Desarrollamos la primera escena del juego, en la que el protagonista estará flotando por el espacio sideral.
.
└── Node2D
└── Sprite2D (Hay que asignarle una textura)
├── Area2D (Hay que asignarle un CollisionShape2D)
│ └── CollisionShape2D (Hay que definirle un area de colisión)
└── Area2D2
└── CollisionShape2D
Añadimos la lógica para detectar la pulsación sobre las áreas
Cuando hagamos click sobre alguna de las dos Area2D, debemos mostrar una traza. Luego, en lugar de una traza, redireccionaremos a otra escena.
Para detectar las pulsaciones, Area2D emitirá una señal que vamos a recoger desde un script.
Pulsamos con el botón derecho sobre el nodo Node2D → Añadir Script …
1. Seleccionamos Area2D en el arbo de nodos → En el panel inspector navegamos a la pestaña Nodo → En la subpestaña señales hay una señal llamada input_event → la arrastramos al código fuente del nodo Node2D.
2. Completamos el código fuente que se ha añadido al script con el siguiente código:
func _on_area_2d_input_event(viewport: Node, event: InputEvent, shape_idx: int) -> void:
if event is InputEventMouseButton and event.pressed:
print("¡Nave pulsada!")
3. Ejecutamos el juego para ver que todo ha ido bien.
4. Repetimos los pasos para detectar la pulsación sobre la bola del mundo.
5. Realizamos el resto de escenas. De momento, en todos los casos, al pulsar sobre el area interactiva debería mostrarse una traza.
6. Añadimos el código necesario para que en lugar de una traza se cargue una nueva escena:
get_tree().change_scene_to_file("res://scenes/spacehip/spaceship.tscn")