audio-manager.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { _decorator, AudioClip, AudioSource, Component } from 'cc';
  2. const { ccclass, property } = _decorator;
  3. @ccclass('AudioManager')
  4. export class AudioManager extends Component {
  5. private static _ins: AudioManager;
  6. /** 全局唯一安全实例 */
  7. public static get ins(){
  8. return AudioManager._ins;
  9. }
  10. /** 音效类型 */
  11. public static get EAudio(){
  12. return EAudio;
  13. }
  14. @property(AudioSource)
  15. private bgm: AudioSource = null;
  16. @property(AudioSource)
  17. private effect: AudioSource = null;
  18. @property([AudioClip])
  19. private clip_list: AudioClip[] = [];
  20. private clip_map = new Map<string, AudioClip>();
  21. onLoad(){
  22. AudioManager._ins = this;
  23. this.init();
  24. }
  25. private init(){
  26. this.clip_list.forEach(clip=>this.clip_map.set(clip.name, clip));
  27. }
  28. public static playBGM(){
  29. if(AudioManager.ins.bgm.state == AudioSource.AudioState.PLAYING) return void 0;
  30. if(!AudioManager.ins.bgm.clip){
  31. AudioManager.ins.bgm.clip = AudioManager.ins.clip_map.get(EAudio.BGM_GLOBAL);
  32. AudioManager.ins.bgm.loop = true;
  33. }
  34. AudioManager.ins.bgm.play();
  35. }
  36. public static pauseBgm(){
  37. if(AudioManager.ins.bgm.state != AudioSource.AudioState.PLAYING) return void 0;
  38. AudioManager.ins.bgm.pause();
  39. }
  40. public static playEffect(effect: EAudio){
  41. let clip = AudioManager.ins.clip_map.get(effect);
  42. if(!clip) return void 0;
  43. AudioManager.ins.effect.playOneShot(clip);
  44. }
  45. // 静音
  46. public static mute(mute: boolean){
  47. AudioManager.ins.bgm.volume = mute ? 0 : 1;
  48. AudioManager.ins.effect.volume = mute ? 0 : 1;
  49. }
  50. }
  51. enum EAudio {
  52. /** 全局-游戏背景Bgm */
  53. BGM_GLOBAL = "ui_01",
  54. /** 游戏内-关卡挑战失败背景音 */
  55. BGM_DEFEAT = "ui_10",
  56. /** 游戏内-关卡挑战成功获胜背景音 */
  57. BGM_VICTORY = "ui_05",
  58. /** 游戏内-获得钻石奖励背景音 */
  59. BGM_DIAMOND = "ui_11",
  60. /** 全局-点击任意区域背景音 */
  61. EF_CLICK = "ui_02",
  62. /** 游戏内-消除1组卡牌背景音 */
  63. EF_REMOVE = "ui_03",
  64. /** 游戏内-获得钞票奖励上浮余额栏背景音 */
  65. EF_SYMBOL = "ui_04",
  66. /** 过度页-背景音效 */
  67. EF_TRANSITION = "ui_06",
  68. /** 游戏内-洗牌道具背景音 */
  69. EF_SHUFFLE = "ui_07",
  70. /** 游戏内-撤回/移出道具背景音 */
  71. EF_REVOKE = "ui_08",
  72. /** 游戏内-棋盘入场背景音 */
  73. EF_BOARD = "ui_09",
  74. }