AudioManager.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { _decorator, AudioClip, AudioSource, Component, Node, resources } from 'cc';
  2. const { ccclass, property } = _decorator;
  3. @ccclass('AudioManager')
  4. export class AudioManager extends Component {
  5. private static _instance: AudioManager;
  6. private static _audioSource?: AudioSource;
  7. static get instance() {
  8. if (this._instance) {
  9. return this._instance;
  10. }
  11. this._instance = new AudioManager();
  12. return this._instance;
  13. }
  14. protected onLoad(): void {
  15. this.init();
  16. }
  17. /**管理器初始化*/
  18. init() {
  19. AudioManager._audioSource = this.node.getComponent(AudioSource);
  20. }
  21. /**
  22. * 播放音乐
  23. * @param {Boolean} loop 是否循环播放
  24. */
  25. playMusic(loop: boolean = true) {
  26. const audioSource = AudioManager._audioSource!;
  27. audioSource.loop = loop;
  28. if (!audioSource.playing) {
  29. audioSource.play();
  30. }
  31. }
  32. /**
  33. * 播放音效
  34. * @param {String} name 音效名称
  35. * @param {Number} volumeScale 播放音量倍数
  36. */
  37. playSound(name: string, volumeScale: number = 1) {
  38. const audioSource = AudioManager._audioSource!;
  39. resources.load(name, AudioClip, (err: any, ac) => {
  40. audioSource.playOneShot(ac, volumeScale);
  41. });
  42. }
  43. }