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

