Hello,
I have a VBoxContainer were I spawn so called “Feld” in. The “Feld” are a TextureButton with a Label Node as a child. If you click on the Feld you open a so called “formular” (a TextureRect with a RichTextLabel and a few TextureButtons).
I’m in the script of the VBoxContainer and I spawn as much Feld as needed via a simple “for i in variable”, but I struggle with two things.
Firstly: How do I access the text of the Label node that is a child of the instanciated Feld? I tried .get_child() or .text directly nothing seems to work.
Secondly: How do I communicate with the script of Feld? Usually I use signals with the node menu next to the inspector, but this is too specific for my porpuse. I need to make multiple connections with multiple instances only by running the same “for i in variable” command.
Show some of your script! when and how do you need to access the labels is important, since they are instantiated the options are a little limited. get_child works if you know the index, for child in get_children() is great for iterating through all labels.
To connect to signals at run-time you’ll use the .connect function. for example
func _ready() -> void;
var new_timer := Timer.new()
add_child(new_timer)
new_timer.timeout.connect(_on_runtime_timer_timeout)
new_timer.start()
func _on_runtime_timer_timeout() -> void:
print("Hello from timer!")
Acessing child variables works like so, if they only have one child that is a label.
var feld := feld_prefab.instantiate()
add_child(feld)
var feld_label := clone.get_child(0) as Label # type casting with as
feld_label.text = "hello"
You can use the find_child method to search for its children. Or you can save the reference inside your feld script to save on performance, and access it directly from there.
## On feld script
@onready var label_reference = $Label