compsci_godot_albert/_subsections/sec03/lesson-07.org
2024-11-29 07:13:38 +02:00

3.5 KiB

Section 03 - Lesson 07, 08 | Moving/ Removing the Gem

Notes

Moving the Gem

we use scripting to extend node functionality

get the gem to fall

  • we need to get the Gem/Area2D node to fall

    • if we had the sprite fall, the collision2D node would stay where it was
add a script to the root node
  • click on the attach new script button in the scene pane

    • /notes/compsci_godot_albert/media/commit/38c24431857e31a4606631aed41adb56d9038f11/_share/media/img/albert/attach_new_script.png
  • one script per node is the limit
  • you get access to all the children nodes inside the scene.
attach node script dialogue
  • Template is generally Node: Default
  • some object types provide other templates with different boiler plate code
  • the node we attached a script to will have a script icon next to the eye icon

    • /notes/compsci_godot_albert/media/commit/38c24431857e31a4606631aed41adb56d9038f11/_share/media/img/albert/script_icon.png
detaching script from node
  • sometimes you don't want a certain script attached to a node

    • for testing purposes to prevent a script from doing something
    • you want a different script, etc.
  • if a script is attached, then when you select the node the "script attach button" will change from a green plus to a red x
  • press the button and detach it

life cycle of a node

functions
  • _ready()
  • _process(delta:float)
tree build by stages
  1. initialization stage

    • creation
    • function: _init_()
  2. attachment stage

    • added to tree
    • function: _enter_tree()
  3. finalization stage

    • node and children ready
    • function: _read()
how it is built
  • every node is given an id before it gets a name
  • all init functions will be called before any other stage for any other node is invoked
  • similarly the attachment stage, of adding nodes to other nodes takes place before any other function in any other node is activated

    • at this point we get a name for the node
  • ready tells us that the node is up and ready to go, and so are its children

    • therefore the children of the node will be set up before the parent
    • ready will be called for the children first
process functions
  • invoked on all nodes
  • every frame
  • used to update the node each frame
  • delta refers to the time that elapsed since previous call on previous frame

    • use delta to normalize things
_process(delta)
  • called in main loop
  • as fast as possible
_physics_process(delta)
  • called in main loop
  • regular interval

adding code to move gem down

  • increase the y position
  • all node parameters can be found in inspector (including inherited)
  • position.y = position.y + speed * delta

    • speed can be anything
    • we multiply by delta to normalize it compared to the time of the previous frame

Removing the Gem

basic idea

  • use the viewport rect
  • find the height of the rect
  • when the y position of the gem is outside the bounds remove it

implementation

  • use get_viewport_rect to get the w,h
  • check if position.y > rect.size.y
  • use queue_free function to remove this from the queue
  • set process to stop being called via set_process