症状很典型:同一份代码,在这台机器上角色慢悠悠,换台机器快得像滑冰;或者游戏一卡,人物「瞬移」一段。

    原因是把位移写成了每帧固定量:

    position.x += 5
    

    _process 每帧调一次,60 帧的机器一秒加 300,144 帧的机器一秒加 720。速度直接被帧率绑住了。

    正解是乘上 delta。delta 是上一帧到这一帧的秒数,乘完之后位移变成「每秒多少像素」,跟帧率脱钩:

    position.x += speed * delta
    

    物理相关的移动放 _physics_process,它按固定步长跑,delta 更稳定;只在 _process 里做显示层的东西。混着用会出现「画面看着抖、判定却没问题」这类别扭现象。

    还有一层是加速。真做了加速度,别写成 velocity += accel(漏乘 delta),应该是 velocity += accel * delta,然后再 position += velocity * delta。两层都乘,单位才对得上。

    一个容易忽略的例外:输入采样本身不该乘 delta。Input.get_vector 拿到的是方向,不是位移,乘上去会让输入强度随帧率变化。

    验证方法很土但有效:在项目设置里把最大帧率临时限到 30,跑一遍看移动速度,再放回 60 跑一遍。两次差不多,说明写对了。