diff options
Diffstat (limited to 'demos/misc/autoload')
-rw-r--r-- | demos/misc/autoload/global.gd | 41 | ||||
-rw-r--r-- | demos/misc/autoload/scene_a.gd | 12 | ||||
-rw-r--r-- | demos/misc/autoload/scene_a.scn | bin | 1459 -> 1660 bytes | |||
-rw-r--r-- | demos/misc/autoload/scene_b.gd | 12 | ||||
-rw-r--r-- | demos/misc/autoload/scene_b.scn | bin | 1448 -> 1639 bytes |
5 files changed, 17 insertions, 48 deletions
diff --git a/demos/misc/autoload/global.gd b/demos/misc/autoload/global.gd index d1bd45461f..735995e806 100644 --- a/demos/misc/autoload/global.gd +++ b/demos/misc/autoload/global.gd @@ -1,43 +1,36 @@ extends Node -var current_scene = null +# Changing scenes is most easily done using the functions `change_scene` +# and `change_scene_to` of the SceneTree. This script demonstrates how to +# change scenes without those helpers. func goto_scene(path): - # This function will usually be called from a signal callback, # or some other function from the running scene. # Deleting the current scene at this point might be # a bad idea, because it may be inside of a callback or function of it. # The worst case will be a crash or unexpected behavior. - + # The way around this is deferring the load to a later time, when # it is ensured that no code from the current scene is running: - + call_deferred("_deferred_goto_scene",path) func _deferred_goto_scene(path): - - # Immediately free the current scene, - # there is no risk here. - current_scene.free() - + # Immediately free the current scene, there is no risk here. + get_tree().get_current_scene().free() + # Load new scene - var s = ResourceLoader.load(path) - + var packed_scene = ResourceLoader.load(path) + # Instance the new scene - current_scene = s.instance() - - # Add it to the active scene, as child of root - get_tree().get_root().add_child(current_scene) - - -func _ready(): - # Get the current scene, the first time. - # it is always the last child of root, - # after the autoloaded nodes. - - var root = get_tree().get_root() - current_scene = root.get_child( root.get_child_count() -1 ) + var instanced_scene = packed_scene.instance() + + # Add it to the scene tree, as direct child of root + get_tree().get_root().add_child(instanced_scene) + + # Set it as the current scene, only after it has been added to the tree + get_tree().set_current_scene(instanced_scene) diff --git a/demos/misc/autoload/scene_a.gd b/demos/misc/autoload/scene_a.gd index 21a6a84eb9..03da86d9a0 100644 --- a/demos/misc/autoload/scene_a.gd +++ b/demos/misc/autoload/scene_a.gd @@ -1,17 +1,5 @@ - extends Panel -# member variables here, example: -# var a=2 -# var b="textvar" - -func _ready(): - # Initalization here - pass - - - func _on_goto_scene_pressed(): get_node("/root/global").goto_scene("res://scene_b.scn") - pass # replace with function body diff --git a/demos/misc/autoload/scene_a.scn b/demos/misc/autoload/scene_a.scn Binary files differindex 61727a57ba..eff314e29d 100644 --- a/demos/misc/autoload/scene_a.scn +++ b/demos/misc/autoload/scene_a.scn diff --git a/demos/misc/autoload/scene_b.gd b/demos/misc/autoload/scene_b.gd index 4a88fddda9..dea8c4623f 100644 --- a/demos/misc/autoload/scene_b.gd +++ b/demos/misc/autoload/scene_b.gd @@ -1,17 +1,5 @@ - extends Panel -# member variables here, example: -# var a=2 -# var b="textvar" - -func _ready(): - # Initalization here - pass - - - func _on_goto_scene_pressed(): get_node("/root/global").goto_scene("res://scene_a.scn") - pass # replace with function body diff --git a/demos/misc/autoload/scene_b.scn b/demos/misc/autoload/scene_b.scn Binary files differindex ae09eeff88..4cdb03e90e 100644 --- a/demos/misc/autoload/scene_b.scn +++ b/demos/misc/autoload/scene_b.scn |