Godot 4 入门(04):CharacterBody2D 实现八方向移动

0 阅读1分钟

一、配置输入动作

打开“项目设置 → 输入映射”,创建 move_leftmove_rightmove_upmove_down,分别绑定 A/D/W/S 和方向键。代码只关心动作名,将来增加手柄无需重写移动逻辑。

4-1.png

把 Player 根节点类型更改为 CharacterBody2D

4-2.png 同步修改脚本:

extends CharacterBody2D

@export var speed: float = 220.0

func _physics_process(_delta: float) -> void:
    var direction := Input.get_vector(
        "move_left", "move_right", "move_up", "move_down"
    )
    velocity = direction * speed
    move_and_slide()

Input.get_vector() 把四个动作合成 Vector2,并把长度限制在 1,因此同时按 W+D 不会比只按 D 更快。velocity 表示像素/秒,move_and_slide() 已按物理时间步处理位移,不要再给 velocity 乘 delta

移动物理对象应放在 _physics_process(),它以固定物理频率运行;普通视觉效果更适合 _process()

二、停止与移动

没有输入时 direction 为 (0, 0),velocity 也随之归零。若希望有加速和减速,可替换赋值:

velocity = velocity.move_toward(direction * speed, 1200.0 * _delta)

4-3.png