extends Node var sfx_players = [] as Array[AudioStreamPlayer] var idx = 0 var bgm_dict = {} func _ready() -> void: for i in range(5): var sfx_player = RandomAudioStreamPlayer.new() sfx_players.append(sfx_player) sfx_player.bus = "game_sfx" add_child(sfx_player) func play_sfx(sfx: AudioStream, db := 1.0) -> void: sfx_players[idx].stream = sfx sfx_players[idx].volume_db = db sfx_players[idx].play() idx = wrapi(idx + 1, 0, 5) # 挂载并循环播放 bgm 音效 func loop_bgm_music(music_name: StringName, stream: AudioStream, db := 0.0, loop := true) -> void: var audio_player = bgm_dict.get(music_name) as AudioStreamPlayer if audio_player: bgm_dict.erase(music_name) audio_player.queue_free() audio_player.stop() audio_player = AudioStreamPlayer.new() add_child(audio_player) bgm_dict[music_name] = audio_player audio_player.stream = stream audio_player.volume_db = db audio_player.bus = "game_music" audio_player.play() if loop and stream.get_length() > 0: audio_player.finished.connect(audio_player.play) func stop_bgm_music(music_name: StringName) -> void: var audio_player = bgm_dict.get(music_name) as AudioStreamPlayer if audio_player: audio_player.stop() remove_child(audio_player) audio_player.queue_free() bgm_dict.erase(music_name) else: print("music bgm not found: ", music_name)