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

Godot鼠标移动时角色跑步动画切换异常问题求助

解决Godot鼠标点击移动时动画切换异常的问题

你的核心问题是没有根据角色的移动状态动态切换动画,初始化后只固定播放了idle,移动时没触发run动画,到达目标后也没切回idle。以下是修正后的代码和关键说明:

修正后的完整代码

extends CharacterBody2D

@export var speed = 250
@onready var anim: AnimatedSprite2D = $AnimatedSprite2D

var click_position = Vector2()

func _ready():
    click_position = position
    anim.play("idle")

func _physics_process(delta: float):
    # 处理右键点击设置目标点
    if Input.is_action_just_pressed("Rclick"):
        click_position = get_global_mouse_position()
    
    # 判断是否需要移动
    if position.distance_to(click_position) > 3:
        var target_dir = (click_position - position).normalized()
        velocity = target_dir * speed
        move_and_slide()
        
        # 切换跑步动画,避免重复播放导致动画重置
        if anim.animation != "run":
            anim.play("run")
        
        # 可选:根据移动方向翻转角色
        if target_dir.x > 0:
            anim.flip_h = false
        else:
            anim.flip_h = true
    else:
        # 到达目标后停止移动,切换回 idle 动画
        velocity = Vector2.ZERO
        if anim.animation != "idle":
            anim.play("idle")

关键修改点说明

  • 修复了_physics_process的参数错误:原代码delta:是语法错误,改为delta: float
  • 添加了动画状态判断:每次操作前检查当前动画是否为目标动画,避免重复调用play()导致动画反复从头播放
  • 到达目标点后主动将velocity设为零,确保角色完全停止
  • 增加了角色翻转逻辑(可选),让角色朝向移动方向,更符合直觉
  • 移除了冗余的target_position变量,简化逻辑

这样修改后,角色会在点击移动时自动切换到跑步动画,到达目标后立刻切回 idle 状态,不会出现动画卡住的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:07:09