import { _decorator, AudioClip, AudioSource, assert } from 'cc'; import { GlobalData } from '../GlobalData'; import { AudioClipNames } from '../GlobalTypes'; const { ccclass, property } = _decorator; @ccclass('AudioManager') export class AudioManager { private audioSource: AudioSource = null; private soundOn: boolean = true clips: {[props:string]:AudioClip} = {} private static _instance: AudioManager; public static get instance () { if (this._instance) { return this._instance; } this._instance = new AudioManager(); return this._instance; } init(audioSource: AudioSource){ this.audioSource = audioSource this.getSoundConfig() if (this.soundOn){ this.play() }else { this.pause() } } getSoundConfig(){ this.soundOn = GlobalData.instance.getConfigData("audioconfig") if (this.soundOn === null){ this.soundOn = true } return this.soundOn } setSoundConfig(soundOn: boolean) { this.soundOn = soundOn if (this.soundOn){ this.play() }else { this.pause() } GlobalData.instance.setConfigData("audioconfig", this.soundOn) } play () { if (!this.soundOn) return // 播放音乐 this.audioSource.play(); } pause () { // 暂停音乐 this.audioSource.pause(); } async playBgm (clipName: AudioClipNames) { if (!this.soundOn) return this.audioSource.stop() this.audioSource.clip = this.clips[AudioClipNames[clipName]] this.audioSource.play(); } playOneShot (clipName: AudioClipNames, volume: number = 1) { if (!this.soundOn) return this.audioSource.playOneShot(this.clips[AudioClipNames[clipName]], volume); } }