在 Godot 引擎中,Delta Time(Δt,增量时间) 是一个非常重要的概念,它表示 上一帧到当前帧之间的时间间隔(以秒为单位)。
1. 什么是 Delta Time?
- Delta Time(Δt) = 当前帧时间 - 上一帧时间
- 单位:秒(seconds)
- 作用:确保游戏逻辑在不同帧率(FPS)下运行一致,避免因设备性能差异导致游戏速度忽快忽慢。
2. 为什么需要 Delta Time?
假设你有一个物体以 每秒移动 100 像素 的速度移动:
- 如果游戏运行在 60 FPS(每帧约 0.0167 秒),则每帧移动
100 * 0.0167 ≈ 1.67像素。 - 如果游戏运行在 30 FPS(每帧约 0.0333 秒),则每帧移动
100 * 0.0333 ≈ 3.33像素。
如果没有 Delta Time,低帧率时物体会移动得更快,导致游戏体验不一致。
使用 Delta Time 后,无论帧率如何,物体每秒都会移动 100 像素(speed * delta)。
3. 在 Godot 中如何使用 Delta Time?
Godot 会自动在 _process(delta) 和 _physics_process(delta) 中传入 delta 参数,你只需要用它来计算移动、动画等逻辑。
extends Node2D
var speed = 200 # 每秒 200 像素
func _process(delta):
position.x += speed * delta # 每帧移动 speed * delta 像素
4. _process(delta) vs _physics_process(delta)
| 方法 | 调用频率 | 适用场景 |
|---|---|---|
_process(delta) | 每帧调用(受 Engine.iterations_per_second 影响) | 非物理相关的逻辑(UI 动画、普通移动) |
_physics_process(delta) | 固定时间步长(默认 60 次/秒) | 物理相关逻辑(刚体运动、碰撞检测) |
推荐:
- 普通移动 →
_process(delta) - 物理运动 →
_physics_process(delta)