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

Godot中如何让Animated Sprite仅在首次进入场景时播放一次?

解决Animated Sprite仅首次进入场景播放一次的问题

问题原因

你定义的has_not_played是节点的局部变量,每次场景重新加载时,节点会被重新实例化,变量会重置为true,导致动画每次进入场景都会重复播放。另外你代码里的play(animation_name)缺少引号,应该写成play("animation_name"),否则会因找不到变量报错。

可行解决方案

方案1:使用全局脚本(AutoLoad)

创建一个全局脚本(比如命名为Global.gd),在项目设置里将其设为AutoLoad,这样它会在游戏启动时自动加载,变量状态会在整个游戏生命周期中保留:

# Global.gd 内容
var has_played_animation = false

然后在你的节点脚本中调用:

on_scene_ready():
    if not Global.has_played_animation:
        $AnimatedSprite.play("animation_name")

on_AnimatedSprite_animation_finished():
    $AnimatedSprite.hide()
    Global.has_played_animation = true

方案2:使用持久化存储(重启游戏也能保留状态)

如果你希望即使重启游戏,动画也只播放一次,可以用Godot的持久化存储功能:

Godot 3 版本:

on_scene_ready():
    if not PlayerPrefs.get_bool("has_played_animation", false):
        $AnimatedSprite.play("animation_name")

on_AnimatedSprite_animation_finished():
    $AnimatedSprite.hide()
    PlayerPrefs.set_bool("has_played_animation", true)
    PlayerPrefs.save()

Godot 4 版本:

on_scene_ready():
    if not Settings.get_setting("game/has_played_animation", false):
        $AnimatedSprite.play("animation_name")

on_AnimatedSprite_animation_finished():
    $AnimatedSprite.hide()
    Settings.set_setting("game/has_played_animation", true)
    Settings.save()

方案3:标记节点为Persistent

如果这个场景在游戏中只会切换一次,或者你希望节点在场景卸载后不被销毁,可以在编辑器中选中AnimatedSprite节点,右键选择Make Persistent。这样节点的局部变量状态会被保留,场景重新加载时不会重置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:45:34