"use strict"; cc._RF.push(module, '35bf7aSxzBC9JVHLNfEdHI9', 'nx.fx.BGM'); // Scripts/nx/cmp/flex/nx.fx.BGM.js "use strict"; /****************************************************************** * Copyright(C) 2019 - 2020 Nx Studio * * NX UI插件 -- 背景音乐 * * 2018.05.18 ******************************************************************/ cc.Class({ "extends": cc.Component, properties: { bgmRK: { "default": "", displayName: "资源键" }, isFadeIn: { "default": true, displayName: "渐入" }, isFadeOut: { "default": true, displayName: "渐出" }, fadeSecs: { "default": 0.5, displayName: "出入耗时" }, isMainBGM: { "default": false, displayName: "主组件" }, restoreLastBGM: { "default": true, displayName: "关闭恢复上次音效" } }, // 编辑器特性 editor: { // 允许当前组件在编辑器模式下运行 executeInEditMode: false, // requireComponent 参数用来指定当前组件的依赖组件 requireComponent: null, // 当本组件添加到节点上后,禁止同类型(含子类)的组件再添加到同一个节点,防止逻辑发生冲突 disallowMultiple: true, // menu 用来将当前组件添加到组件菜单中,方便用户查找 menu: "扩充/audio.bgm 背景音乐" }, // 初始化 onEnable: function onEnable() { // 重置 this.reset(); // 激活 this.reActive(); // 关闭所有当前音效 nx.audio.stopSFXAll(); // 主组件 if (this.isMainBGM) { nx.bridge.cbgms = nx.bridge.cbgms || []; nx.bridge.cbgms.push(this); } }, // 隐藏 onDisable: function onDisable() { var _this = this; // 重置 this.reset(); // 主组件 if (this.isMainBGM) { nx.dt.arrDelete(nx.bridge.cbgms, function (_tm) { return _tm == _this; }); } // 恢复 if (this.restoreLastBGM) { if (nx.dt.arrNEmpty(nx.bridge.cbgms)) { var bgm = nx.bridge.cbgms[nx.bridge.cbgms.length - 1]; if (bgm) { bgm.reActive(); } } else { nx.audio.stopBGM(); } } }, // 重置 reset: function reset() { this.loading = false; this.fading = 0; this.bgmKey = ""; }, // 激活 reActive: function reActive() { // 无效 if (nx.dt.strEmpty(this.bgmRK)) { return; } // 进行中 if (this.loading || this.fading != 0) { nx.error("[BGM]激活失败,进行中!"); return; } this.loading = true; this.fading = 0; // 预载入音乐 var self = this; nx.res.loadAudio(this.bgmRK, function (_error, _params) { self.loading = false; // 淡出 if (!_error) { self.musicClip = _params; self.fadeOut(); } }); }, // 淡出原有音乐 fadeOut: function fadeOut() { var vol = nx.audio.getBGMVolume(); this.rawVol = vol; this.curVol = vol; this.vps = 1 / this.fadeSecs; // this.bgmKey = this.musicClip; //没有当前数据 if (!this.musicClip) { nx.error("[BGM]播放失败,没有相关音频!", this.bgmRK); } // 没有当前音乐 if (nx.dt.strEmpty(nx.audio.bgmRes)) { this.fadeIn(); return; } // 未开启/当前音量为0 if (!this.isFadeOut || vol <= 0) { this.fadeIn(); return; } // 淡出 this.fading = 1; }, // 淡入新音乐 fadeIn: function fadeIn() { // 关闭当前 nx.audio.stopBGM(); // 播放新的 this.bgmKey = nx.audio.playBGM(this.musicClip); // 未开启/目前音量为0 if (!this.isFadeOut || this.rawVol <= 0) { this.fading = 0; nx.audio.setBGMVolume(this.rawVol, true); return; } // 淡入 this.fading = 2; this.curVol = 0; }, // 更新 update: function update(_dt) { // 未开启 if (this.fading != 1 && this.fading != 2) { return; } // 音乐已改变 // if( this.bgmKey != this.lastBgmKey ) { // this.reset(); // return; // } // 淡出 if (this.fading == 1) { this.curVol = Math.max(0, this.curVol - this.vps * _dt); nx.audio.setBGMVolume(this.curVol, true); if (this.curVol <= 0) { this.fadeIn(); return; } } // 淡入 if (this.fading == 2) { this.curVol = Math.min(this.rawVol, this.curVol + this.vps * _dt); nx.audio.setBGMVolume(this.curVol, true); if (this.curVol >= this.rawVol) { this.fading = 0; return; } } } }); cc._RF.pop();