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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:35:11