You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot 4中C#实现CharacterBody2D翻转时左方向键触发频繁切换异常

问题原因

问题出在ApplyScale的用法上——这个方法是叠加当前缩放值,而非直接设置目标缩放。比如角色已经朝左(Scale.X=-1)时,再次调用ApplyScale(new Vector2(-1,1)),实际会计算为当前Scale * 参数,也就是-1 * -1 = 1,角色又变回朝右。按住A键时每帧都会执行该逻辑,导致缩放在-1和1之间反复切换,出现来回翻转的现象。

修复方案

直接使用Scale属性设置目标缩放值,代替ApplyScale,这样每帧都会直接设置到正确方向,不会出现叠加问题。

修改后的代码:

using Godot;

public partial class CharacterController : CharacterBody2D
{
    [Export]
    public int Speed { get; set; } = 100;
    private Vector2 velocity = new Vector2(0, 0);

    public void InputHandler()
    {
        Vector2 input_direction = Input.GetVector("move_left", "move_right", "move_up", "move_down");
        velocity = input_direction * Speed;
        GD.Print(input_direction);

        if (input_direction.X < 0) // 向左输入
        {
            Scale = new Vector2(-1, 1);
        }
        else if (input_direction.X > 0) // 向右输入
        {
            Scale = new Vector2(1, 1);
        }
        // 输入为0时保留当前朝向,无需额外处理
    }

    public override void _PhysicsProcess(double delta)
    {
        InputHandler();
        // MoveAndCollide和MoveAndSlide二选一即可,MoveAndSlide更适合平台角色移动
        MoveAndSlide(velocity * (float)delta);
    }
}
额外优化提示

原代码同时调用了MoveAndCollide和MoveAndSlide,这两个方法功能重叠,选其一使用即可,MoveAndSlide自带碰撞滑动处理,更适合2D平台角色移动场景。

内容的提问来源于stack exchange,提问作者Sprunk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:55:02