Este exemplo irá fazer com que um valor seja digitado na cena principal, e este valor será reconhecido na cena secundária.
A estrutura do exemplo seguirá desta forma:
Primeiro, vamos construir a base da cena main-scene.tscn. Para simplificar este exemplo, ele será composto por apenas um controle LineEdit.
Em seguida, iremos criar um script básico que irá cuidar de chamar a outra cena, passando o valor digitado no input. Ficará desta forma:
#script-main-scene.gd
extends Node2D
@onready var input_text = $LineEdit
var battle_scene = preload("res://Tutorial/next-scene.tscn")
func _input(event):
if (Input.is_action_just_pressed("action")):
var scene = battle_scene.instantiate()
scene.input_value = input_text.text
get_tree().root.add_child(scene)
get_tree().root.remove_child(self)
No script, estamos salvando o controle LineEdit em uma variável input_text, e vamos pré-carregar a próxima cena em na variável next_scene. E para chamar a próxima cena, vamos esperar que a tecla de ação action seja apertada.
“Mas como eu configuro esta tecla de ação?” Pois bem, basta selecionar as configurações do projeto, e procurar por Input Map:
Voltando ao script, a linha scene.input_value = input_text.text indica que a cena instanciada possui uma variável de controle chamada input_value, e estamos gravando o valor do texto digitado nele.
Agora vamos focar na segunda cena. Ela também possuirá uma estrutura simples:
E agora vamos cuidar do script desta cena. Ela ficará desta forma:
#script-next-scene.gd
extends Node2D
@export var input_value: String
@onready var input = $LineEdit
func _ready():
input.text = input_value
O nome do campo que irá receber o parâmetro precisa, obrigatoriamente, ser o mesmo valor usado no script script-main-scene.gd, ou seja, precisa se chamar input_value.
Você pode passar textos, números, dicionários, objetos… O céu é o limite.