const {ccclass, property} = cc._decorator; @ccclass export default class AudioManager extends cc.Component { //背景音乐 @property(cc.AudioClip) audioGameBgm0: cc.AudioClip = null; //跳跃 @property(cc.AudioClip) audioButtonClick: cc.AudioClip = null; //落地上 @property(cc.AudioClip) audioWarning: cc.AudioClip = null; //碰撞 @property(cc.AudioClip) audioWin: cc.AudioClip = null; //落方块上 @property(cc.AudioClip) luodui: cc.AudioClip = null; mAudioMap: {}; bgMusicVolume: number; effectMusicVolume: number; mMusicSwitch: number; mEffectSwitch: number; brickSound: any; reward: boolean; finish: boolean; rewardCount: number; mMusicKey: any; static _instance: any; ctor () { this.mAudioMap = {}; /** * 默认音量大小 * @type {number} */ this.bgMusicVolume = 0.1; this.effectMusicVolume = 1; this.mMusicSwitch = 1; this.mEffectSwitch = 1; } play (audioSource, loop, callback, isBgMusic) { if (isBgMusic && !this.mMusicSwitch) return; if (!isBgMusic && !this.mEffectSwitch) return; var volume = isBgMusic ? this.bgMusicVolume : this.effectMusicVolume; if (cc.sys.isBrowser) { if(audioSource == this.brickSound){ volume = 0.1; } volume = 1; var context = cc.audioEngine.play(audioSource, loop, volume); if (callback){ cc.audioEngine.setFinishCallback(context, function(){ callback.call(this); }.bind(this)); } // cc.wwx.OutPut.log('play audio effect isBrowser: ' + context.src); this.mAudioMap[audioSource] = context; return audioSource; } else { return audioSource; } } save () { // cc.wwx.Storage.setItem(cc.wwx.Storage.Key_Setting_Music_Volume, this.mMusicSwitch); // cc.wwx.Storage.setItem(cc.wwx.Storage.Key_Setting_Effect_Volume, this.mEffectSwitch); } onLoad() { if (AudioManager._instance == null) { AudioManager._instance = this; cc.game.addPersistRootNode(this.node); } else { this.node.destroy(); return; } this.reward = false; this.finish = false; this.rewardCount = 0; this.ctor(); this.preload(); } preload () { if (!(cc.sys.platform === cc.sys.WECHAT_GAME)) { return; } var musics = [ this.audioGameBgm0, ]; musics.forEach(function(path) { // var musicPath = wxDownloader.REMOTE_SERVER_ROOT + path; // if (musicPath != wxDownloader.REMOTE_SERVER_ROOT && musicPath.endsWith('.mp3')) { // cc.loader.load(musicPath, function(err, remoteUrl) { // if (err) { // cc.error(err.message || err); // return; // } // }); // } }) } getAudioMusicSwitch() { return this.mMusicSwitch; } getAudioEffectSwitch() { return this.mEffectSwitch; } trunAudioSound(on) { this.switchMusic(on); this.switchEffect(on) } switchMusic (on) { if (this.mMusicSwitch != (on?1:0)) { this.mMusicSwitch = 1-this.mMusicSwitch; // this.save(); } if(on) { this.playMusicGame(); } else { this.stopMusic(); } } switchEffect (on) { if (this.mEffectSwitch != (on?1:0)){ this.mEffectSwitch = 1-this.mEffectSwitch; // this.save(); } } onHide () { cc.audioEngine.pauseAll(); // if (CC_JSB) { // } else { // for (var key in this.mAudioMap) { // if (key === this.mMusicKey) { // this.mAudioMap[key].pause(); // } else { // this.mAudioMap[key].stop(); // } // } // } } onShow () { cc.audioEngine.resumeAll(); // if (CC_JSB) { // } else { // if (!this.mMusicSwitch) return; // var context = this.mAudioMap[this.mMusicKey]; // if (context) { // context.play(); // } // } } playMusic (key, callback, loop) { loop = typeof loop == 'undefined' || loop ? true : false; this.stopMusic(); this.mMusicKey = this.play(key, loop, callback, true); } /** * 游戏背景音乐 */ playMusicGame () { this.playMusic(this.audioGameBgm0,{},true); } /** * 停止背景音乐播放 */ stopMusic () { // cc.wwx.OutPut.log('stopMusic audio effect wx: ' + this.mMusicKey); var context = this.mAudioMap[this.mMusicKey]; if (typeof(context) != 'undefined') { if (cc.sys.isBrowser) { cc.audioEngine.stop(context); } else { context.stop(); } cc.audioEngine.stop(context); } } // 炸弹、火箭爆炸音效 playJump () { } //激光音效 playLuo() { return this.play(this.luodui, false,null,this.mEffectSwitch); } //技能音效 playGround() { } //技能音效 playPz() { } /* * 游戏开始音效 * */ playGameStart() { } /* * 失败的游戏结束 */ playGameOver() { } /* * 成功的游戏结束 */ playGameResultFailed() { } /* * 成功的游戏结束 */ playGameResultSuccess() { } /** * 报警的音效 */ playWarning() { return this.play(this.audioWarning, false,null,this.mEffectSwitch); } /* * 方块碰撞的声音 */ playBrick() { // return this.play(this.brickSound,false); } //方块破碎的声音 brickBoom(){ } /** * 按钮 */ playAudioButton () { return this.play(this.audioButtonClick, false,null,this.mEffectSwitch); } playWin() { return this.play(this.audioWin, false,null,this.mEffectSwitch); } playRandomMatch() { this.playMusic(this.audioGameBgm0,{},true); } playMatchFoundSound() { this.stopMusic(); // return this.play(this.matchFoundSound, false); } }; // export { AudioManager };