如何在Godot中实现正确的门交互?动画异常问题求助
门动画交互:修复反向播放频繁点击故障问题
要实现点击开门、中途点击反向关门的交互,你遇到的play_backwards频繁点击后动画重置的问题,核心原因是直接切换播放方向时未保留当前动画进度,导致播放器重置到起始点。以下是直接有效的解决方案:
修复核心逻辑
无需拆分动画或使用AnimationTree,只需在切换播放方向时,基于当前动画进度调整播放速度,而非直接调用play或play_backwards重置动画:
func interact(): if locked: $door_sound_locked.play() return var anim_player = $door_anim var target_anim = "open" if !open: open = true # 若当前正反向播放该动画,直接切换为正向速度继续 if anim_player.current_animation == target_anim: anim_player.playback_speed = 1 else: anim_player.play(target_anim) else: open = false # 若当前正正向播放该动画,直接切换为反向速度继续 if anim_player.current_animation == target_anim: anim_player.playback_speed = -1 else: anim_player.play_backwards(target_anim)
状态同步优化(可选)
为避免手动切换open状态与动画实际进度不一致,可通过animation_finished信号同步状态:
func _ready(): $door_anim.connect("animation_finished", self, "_on_door_anim_finished") func _on_door_anim_finished(anim_name): if anim_name == "open": # 根据播放速度判断最终状态 open = $door_anim.playback_speed > 0
这样无论动画是正向播放完成还是反向播放完成,open状态都会自动同步为正确值,避免手动切换的误差。
内容的提问来源于stack exchange,提问作者radrihi
相关产品推荐
相关产品推荐

