创建主角:小鸟
May 12
创建节点的方法:
创建节点/创建Node,点击加号「+」,然后输入需要的节点名称即可创建

创建主角:小鸟
我们需要用到 3 个节点来组成小鸟:
CharacterBody2D— 角色节点(控制移动)Sprite2D— 图片节点(显示外观)CollisionShape2D— 碰撞体节点(检测碰撞)
先用 Godot 自带的图标当小鸟,把它拖到 Sprite2D 的 Texture 上即可:

保存场景
Ctrl + S 保存场景,建一个文件夹专门放场景文件:scenes/bird.tscn

设置碰撞体
选中 CollisionShape2D,在右侧面板选一个形状(矩形:RectangleShape2D),缩放到和图片差不多大:

这个蓝色矩形就是碰撞体,游戏里小鸟撞到东西靠的就是它:

编写脚本
选中 CharacterBody2D 节点,点击右上角的 📜 图标创建脚本:

同样建一个文件夹专门放脚本:scripts/bird.gd

extends CharacterBody2D # 创建时自带的
@export var gravity_scale := 2.0 # 重力倍率(控制掉落快慢)
@export var jump_force := -500.0 # 跳跃力量(负值 = 向上)
@export var max_fall_speed := 1000.0 # 最大掉落速度
func _physics_process(delta: float) -> void:
# 1. 施加重力:每帧让小鸟往下掉
if not is_on_floor():
velocity += get_gravity() * delta * gravity_scale
# 2. 限速:防止掉太快
if velocity.y > max_fall_speed:
velocity.y = max_fall_speed
# 3. 按键跳跃:按下就给一个向上的速度
if Input.is_action_just_pressed("fly"):
velocity.y = jump_force
move_and_slide()
这段代码在干嘛?
extends CharacterBody2D # 创建时自带的
- 为
CharacterBody2D节点创建脚本时会自带的代码。告诉 Godot:这个脚本是给「角色」用的(一般不用理会)。
@export var gravity_scale := 2.0 # 重力倍率(控制掉落快慢)
@export var jump_force := -500.0 # 跳跃力量(负值 = 向上)
@export var max_fall_speed := 1000.0 # 最大掉落速度
var定义变量jump_force等是自定义的变量名,-500.0是我们定义的数值!@export加在前面是为了让 Godot 把变量放到面板上,方便我们后续调整。👇

它就是我们说的「数值」,例如一般游戏中用来定义角色的「攻击力」「血量」......
func _physics_process(delta: float) -> void:
func: 用来定义方法_physics_process(delta):游戏每一帧都会自动执行这个函数(大约每秒 60 次)
func _physics_process(delta: float) -> void:
# 1. 施加重力:每帧让小鸟往下掉
if not is_on_floor():
velocity += get_gravity() * delta * gravity_scale
# 2. 限速:防止掉太快
if velocity.y > max_fall_speed:
velocity.y = max_fall_speed
# 3. 按键跳跃:按下就给一个向上的速度
if Input.is_action_just_pressed("fly"):
velocity.y = jump_force
move_and_slide()
其中:
# 1. 施加重力:每帧让小鸟往下掉
if not is_on_floor():
velocity += get_gravity() * delta * gravity_scale
if是用来【判断】的not是否定句is_on_floor()是 Godot引擎 为CharacterBody2D节点赋予的属性if not is_on_floor():的意思是“如果 ‘角色’ 没有 站在地面时” 是的,如果角色没有在地面,那就让角色往下掉!但是要以什么速度往下掉呢?
velocity += get_gravity() * delta * gravity_scalevelocity是 Godot 给CharacterBody2D内置的「速度」属性。它是一个二维数值,有x(左右速度)和y(上下速度)两个分量。初始值是 0(小鸟不动)get_gravity()是 Godot 内置方法,返回项目设置里的「重力」值(默认向下 980)delta是「上一帧到这一帧的时间间隔」(秒)。乘上它能保证不同帧率(60fps / 120fps)下游戏速度一致gravity_scale是我们自己定义的「重力倍率」,越大掉得越快+=是「累加」的意思,等价于velocity = velocity + ...
所以这一行的意思是:每一帧给 velocity 累加一点点重力。速度越累越大 → 小鸟越掉越快,这就是物理课上学过的「自由落体」。
# 2. 限速:防止掉太快
if velocity.y > max_fall_speed:
velocity.y = max_fall_speed
velocity.y就是上下方向的速度(往下为正、往上为负,这是 Godot 的坐标系约定)- 如果当前下落速度
velocity.y超过了我们设的最大值max_fall_speed,就把它「卡」在最大值上 - 为什么需要? 因为重力会一直累加,没有这个限制小鸟会越掉越快,最后快得看不见
# 3. 按键跳跃:按下就给一个向上的速度
if Input.is_action_just_pressed("fly"):
velocity.y = jump_force
Input.is_action_just_pressed("fly")检测「fly」这个按键刚刚被按下(一次按下只触发一次,长按不会连续触发)- 一旦按下,直接把
velocity.y设为jump_force(前面定义的-500.0,负数 = 向上) - 这就是「跳跃」:瞬间把速度变成向上,覆盖掉之前累加的下落速度
「fly」是什么按键?我们还没告诉 Godot,下面就来配置快捷键。
move_and_slide()
- Godot 给
CharacterBody2D内置的方法 - 根据
velocity真正移动小鸟,并自动处理碰撞(撞到东西就停下来) - 没有这一行,前面算好的
velocity都只是「空想」,小鸟不会真的动起来
配置跳跃按键
代码里用了 Input.is_action_just_pressed("fly"),所以我们需要在项目设置里添加这个按键映射:
路径:项目 -> 项目设置 -> 输入映射 (Input Map)

- 在上方输入
fly,点击「添加」 - 点击
fly右边的+,按下你想要的按键(比如空格键)
这样按空格键小鸟就会往上跳了!不过目前这只小鸟还没有舞台,下一章,我们将为它搭建一个可以飞的场景。