Topic was automatically imported from the old Question2Answer platform.
Asked By
Chrisstar
I have a “Main” scene in which a variable amount of Scenes are instanced. The reference is hold in a dictionary.
The instanced scenes have a visibility notifier that calls queue_free when it leaves the screen. My question is how can the main scene know which instances have been removed (the dictionary keys have to be freed up)? Or do I have to check every reference every time for whether it exists?
Since you keep a reference to them in a dictionary, when they are deleted, what’s left is null reference. If you’re worried about nulls slowly filling you dictionary, you can remove the dictionary entry once the scene is freed. You have a couple of options. Here’s what I’d do.
#"Main.gd"
var scenes = {} # Your dictionary
func make_a_scene_or_whatever():
var scene = Scene.instance()
scene.key = unique_calculated_key
scenes[scene.key] = scene
scene.connect("removed", self, "_on_scene_removed")
add_child(scene)
func _on_scene_removed(scene):
scenes.erase(scene.key)
_
#"Scene.gd"
signal removed(scene)
var key
func _on_Visibility_screen_exited():
emit_signal("removed", self)
queue_free()
You could also store a reference to the dictionary inside the scene itself, but I prefer this way.
Any questions.
BTW I came up with this on the top of my head, so it’s susceptible to errors.