Nodes
Table of Contents
- Overrideable functions (
_ready()
,_process()
, …) - Create and delete a node
Node.get_node()
Node.add_to_group()
- Where should I check for user input?
_process()
or_physics_process()
? - Which class should I use for script-only nodes?
Node.get_viewport_rect()
Overrideable functions (_ready()
, _process()
, …) discussioin
func _enter_tree():
# When the node enters the _Scene Tree_, it becomes active
# and this function is called. Children nodes have not entered
# the active scene yet. In general, it's better to use _ready()
# for most cases.
pass
func _ready():
# This function is called after _enter_tree, but it ensures
# that all children nodes have also entered the _Scene Tree_,
# and became active.
pass
func _exit_tree():
# When the node exits the _Scene Tree_, this function is called.
# Children nodes have all exited the _Scene Tree_ at this point
# and all became inactive.
pass
func _process(delta):
# This function is called every frame.
pass
func _physics_process(delta):
# This is called every physics frame.
pass
- Adding nodes to
SceneTree
- Child nodes are always added after their parent node.
_enter_tree()
is called before adding child nodes- a left node is added,
_enter_tree()
will be called. And then_ready()
call follows. - Once all child nodes' finish calling their
_ready()
, the non-left nodes'_ready()
will be called. - Once all nodes have been added to the
SceneTree
,
- Processing
_processing()
,_physics_process()
are called every frame. Same as other engines._input()
is called only there are some input events.- Use
_unhandled_input()
to catch input events which are not processed by other components, like buttons.
Create and delete a node howto
var s
func _ready():
s = Sprite.new() # Create a new sprite!
add_child(s) # Add it as a child of this node.
func _someaction():
s.free() # Immediately removes the node from the scene and frees it.
func _someaction():
s.queue_free() # Queues the Node for deletion at the end of the current Frame.
Node.get_node()
reference
Node get_node ( NodePath path ) const
path
can be either relative or absolute(in the scene tree).null instance
if the path does not exist.
/root
/root/Character
/root/Character/Sword
/root/Character/Backpack/Dagger
/root/MyGame
/root/Swamp/Alligator
/root/Swamp/Mosquito
/root/Swamp/Goblin
If the current node is Character
, following calls are valid:
get_node("Sword")
get_node("Backpack/Dagger")
get_node("../Swamp/Alligator")
get_node("/root/MyGame")
Since get_node()
is really frequently used, it has a shorthand $
. $<nodepath>
returns the node at the relative path from this node, or returns null
if the node is not found. For example, $AnimatedSprite
, or double-quoted, like $"/root/MyGame"
.
Node.add_to_group()
reference
- It's useful to organize nodes.
- A node can be in any number of groups.
func _on_discovered(): # This is a purely illustrative function.
get_tree().call_group("enemies", "player_was_discovered")
Where should I check for user input? _process()
or _physics_process()
? discussion
- Generally, use
_process()
. - If your input is directly altering a
RigidBody
, use_physics_process()
Which class should I use for script-only nodes? discussion
It is not explicitly mentioned, but most of tutorials use just Node
class for script-only nodes, regardless of 2D or 3D.
Node.get_viewport_rect()
reference
Rect2 get_viewport_rect ( ) const
Get the viewport’s boundaries as a Rect2
.