节点生命周期
1. 节点的生命周期是什么?
生命周期指的是: 一个节点从被创建 ➔ 开始运行 ➔ 被销毁的整个过程。
✅ 理解生命周期,能让你知道什么时候初始化数据、什么时候做逻辑处理、什么时候安全清理资源。
2. Godot中节点生命周期的关键阶段
在 Godot 中,节点的生命周期主要分成这几个重要阶段:
生命周期方法 | 什么时候触发? | 用来做什么? |
---|---|---|
_ready() | 节点和它的子节点都加入场景树后 | 初始化,比如设置初始状态、连接信号 |
_process(delta) | 每一帧调用一次 | 处理每一帧的逻辑,比如移动、检测输入 |
_physics_process(delta) | 每一物理帧调用一次 | 处理物理相关逻辑,比如使用 move_and_slide |
_exit_tree() | 节点将 要从场景树中移除时 | 做清理,比如断开信号、释放资源 |
3. 每个阶段详细讲解
3.1 _ready()
- 定义: 当节点和它的所有子节点都已经加入场景树并且准备好时调用。
- 常见用途:
- 初始化变量
- 连接信号
- 设置子节点属性
🔵 举例:
func _ready():
$Sprite2D.modulate = Color(1, 0, 0) # 一进场景就把角色颜色设为红色
$Button.pressed.connect(_on_button_pressed) # 连接按钮点击事件
3.2 _process(delta)
- 定义: 每一帧调用一次,跟随游戏实际帧率。
- 常见用途:
- 角色移动
- 处理输入(比如键盘按键)
- 动画播放、计时器逻辑
🔵 举例:
func _process(delta):
position.x += 100 * delta # 每秒向右移动 100 像素
3.3 _physics_process(delta)
- 定义: 每一物理帧调用一次,通常固定为 60次/秒。
- 常见用途:
- 物理运动(比如用
move_and_slide
) - 碰撞检测处理
- 应用重力
- 物理运动(比如用
🔵 举例:
func _physics_process(delta):
var velocity = Vector2.ZERO
if Input.is_action_pressed("ui_right"):
velocity.x += 200
move_and_slide(velocity)
3.4 _exit_tree()
- 定义: 当节点即将从场景树移除(比如销毁、场景切换)时调用。
- 常见用途:
- 断开信号连接
- 停止计时器、清理特效
- 释放占用资源
🔵 举例:
func _exit_tree():
print("节点即将被销毁!")