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

Godot 4玩家移动脚本失效求助:代码无报错但无法运行

问题排查与修复方案

核心问题1:move_and_slide()调用位置错误

你的代码仅在无输入的else分支里调用move_and_slide(),导致角色移动时根本未执行核心移动逻辑。必须将move_and_slide()移到player_movement函数末尾,确保无论有无输入都执行移动操作。

核心问题2:play_anim函数未完成

当前函数仅获取了动画节点实例,但未实现实际的动画播放逻辑(虽不影响移动,但会导致动画失效),建议补充完整。

修复后的完整代码

extends CharacterBody2D

const speed = 100
var current_dir = "none"


func _physics_process(delta):
    player_movement(delta)
    
func player_movement(delta):
    # 先重置速度,避免方向切换时残留速度
    velocity = Vector2.Zero

    if Input.is_action_pressed("ui_right"):
        current_dir = "right"
        play_anim(1)
        velocity.x = speed
    elif Input.is_action_pressed("ui_left"):
        current_dir = "left"
        play_anim(1)
        velocity.x = -speed
    elif Input.is_action_pressed("ui_down"):
        current_dir = "down"
        play_anim(1)
        velocity.y = speed
    elif Input.is_action_pressed("ui_up"):
        current_dir = "up"
        play_anim(1)
        velocity.y = -speed
    else:
        play_anim(0)
    
    # 关键:无论是否有输入,都执行移动逻辑
    move_and_slide()
        
func play_anim(movement):
    var anim = $AnimatedSprite2D
    if movement == 1:
        # 请根据你的动画命名修改,比如"walk_right"、"walk_left"等
        anim.play("walk_" + current_dir)
    else:
        # 对应修改为 idle 动画名称,比如"idle_right"
        anim.play("idle_" + current_dir)

额外检查项

  • 确认CharacterBody2D节点下存在AnimatedSprite2D子节点,路径$AnimatedSprite2D正确
  • 检查项目设置的输入映射,确保ui_right、ui_left等动作已绑定对应按键
  • 确认角色场景已正确添加到主场景,无层级遮挡或节点配置错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:13:16