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
相关产品推荐
相关产品推荐

