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

把 Player 根节点类型更改为 CharacterBody2D,
同步修改脚本:
gdscript
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 也随之归零。若希望有加速和减速,可替换赋值:
gdscript
velocity = velocity.move_toward(direction * speed, 1200.0 * _delta)
