func play():
get_node("open").play();
get_tree().change_scene_to_file("res://地图/node.tscn");
pass
这是一个绑定给Button子节点pressed信号的函数。问题是,现在点击按钮它就会切换场景。导致open这个AudioSteamPlayer也会被销毁。于是音效总是会没播完或者直接来不及播,不想使用延迟。要如何处理?
func play():
get_node("open").play();
get_tree().change_scene_to_file("res://地图/node.tscn");
pass
这是一个绑定给Button子节点pressed信号的函数。问题是,现在点击按钮它就会切换场景。导致open这个AudioSteamPlayer也会被销毁。于是音效总是会没播完或者直接来不及播,不想使用延迟。要如何处理?
下午好🌅🌅🌅
本答案参考ChatGPT-3.5
问题分析:
从场景A切换到场景B时,Godot会释放场景A的所有资源来加载场景B。如果在场景A中播放了某些音效,音效会在释放时间停止播放,从而导致切换场景时的音效中断。
解决方案:
1.在场景B的音效节点上添加“Autoplay on Load”选项。这会让音效在加载场景B时自动播放,并且避免中断音效的问题。
2.将音效节点从场景A移到一个持久节点中(例如场景树的根节点),这样音效不会在场景切换时被删除。
修改代码:
移动open节点到场景树的根节点中:
# in play() function
get_node("open").play()
get_tree().root.add_child(get_node("open"))
get_tree().change_scene_to_file("res://地图/node.tscn")
在地图/node.tscn场景中添加一个Autoplay音效节点。
如果您不想使用持久节点或autostart,还可以使用 Godot的Singleton。