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

Godot 2D平台玩家控制器:方向动画实现与Input.get_axis参数问题

问题解决:Godot 2D玩家方向动画与Input.get_axis报错修复

核心问题分析

  1. Input.get_axis参数错误:代码中Input.get_axis("ui_left")仅传入1个参数,而该方法必须接收负方向动作名和正方向动作名两个参数,这是直接报错的原因。
  2. 方向动画逻辑失效:没有正确利用direction变量判断移动方向,也未关联AnimatedSprite2D的动画切换/精灵翻转逻辑。

修复后的完整代码

extends CharacterBody2D

const SPEED = 300.0
const JUMP_VELOCITY = -400.0

func _physics_process(delta: float) -> void:
    var animated_sprite = $AnimatedSprite2D
    var direction := Input.get_axis("ui_left", "ui_right")
    
    # 重力处理
    if not is_on_floor():
        velocity += get_gravity() * delta
        # 跳跃时播放跳跃动画
        animated_sprite.play("jump")
    else:
        # 地面状态下根据移动状态切换动画
        if direction != 0:
            animated_sprite.play("walk")
        else:
            animated_sprite.play("default")

    # 跳跃处理
    if Input.is_action_just_pressed("ui_accept") and is_on_floor():
        velocity.y = JUMP_VELOCITY

    # 移动与方向控制
    if direction:
        velocity.x = direction * SPEED
        # 根据方向翻转精灵(或切换对应方向动画)
        animated_sprite.flip_h = direction < 0
    else:
        velocity.x = move_toward(velocity.x, 0, SPEED)

    move_and_slide()

关键修改说明

  • 修复Input.get_axis调用错误:删除了jump判断中错误的Input.get_axis("ui_left"),直接使用已定义的direction变量判断方向。
  • 关联方向与精灵状态:通过animated_sprite.flip_h = direction < 0实现向左移动时精灵水平翻转(如果你的动画是单方向绘制的,这是最简便的方式;如果有左右独立动画,可替换为animated_sprite.play("walk_left")或walk_right)。
  • 完善动画状态切换:区分地面 idle、走路、空中跳跃三种状态的动画播放逻辑,确保动画状态与玩家行为一致。
  • 优化变量引用:将$AnimatedSprite2D赋值给变量animated_sprite,减少重复节点查找,提升性能。

额外注意事项

  • 确保你的AnimatedSprite2D节点已添加对应的动画("default"、"walk"、"jump"),动画名称需与代码中一致。
  • 如果使用左右独立动画,可将方向判断逻辑修改为:
    if direction < 0:
        animated_sprite.play("walk_left")
    elif direction > 0:
        animated_sprite.play("walk_right")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:24:57