AudioExample.ts 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. import { _decorator, Component, Node, Button } from 'cc';
  2. import { Audio } from '../AudioManager/AudioManager';
  3. const { ccclass, property } = _decorator;
  4. /**
  5. * 音频系统使用示例
  6. * 展示如何在游戏中使用音频功能
  7. */
  8. @ccclass('AudioExample')
  9. export class AudioExample extends Component {
  10. @property({ type: Button, tooltip: '播放背景音乐按钮' })
  11. public playMusicButton: Button = null;
  12. @property({ type: Button, tooltip: '停止背景音乐按钮' })
  13. public stopMusicButton: Button = null;
  14. @property({ type: Button, tooltip: '播放音效按钮' })
  15. public playSFXButton: Button = null;
  16. onLoad() {
  17. this.bindEvents();
  18. }
  19. private bindEvents() {
  20. if (this.playMusicButton) {
  21. this.playMusicButton.node.on(Button.EventType.CLICK, this.onPlayMusicClick, this);
  22. }
  23. if (this.stopMusicButton) {
  24. this.stopMusicButton.node.on(Button.EventType.CLICK, this.onStopMusicClick, this);
  25. }
  26. if (this.playSFXButton) {
  27. this.playSFXButton.node.on(Button.EventType.CLICK, this.onPlaySFXClick, this);
  28. }
  29. }
  30. private onPlayMusicClick() {
  31. // 播放背景音乐
  32. Audio.playMusic('audio/music/background_music', true);
  33. // 播放按钮点击音效
  34. Audio.playSFX('audio/sfx/button_click', 0.6);
  35. }
  36. private onStopMusicClick() {
  37. // 停止背景音乐
  38. Audio.stopMusic();
  39. // 播放按钮点击音效
  40. Audio.playSFX('audio/sfx/button_click', 0.6);
  41. }
  42. private onPlaySFXClick() {
  43. // 播放各种音效示例
  44. Audio.playSFX('audio/sfx/weapon_fire', 0.8);
  45. // 延迟播放爆炸音效
  46. this.scheduleOnce(() => {
  47. Audio.playSFX('audio/sfx/explosion', 1.0);
  48. }, 0.5);
  49. }
  50. /**
  51. * 游戏开始时的音频设置示例
  52. */
  53. public onGameStart() {
  54. // 播放游戏开始音效
  55. Audio.playSFX('audio/sfx/game_start');
  56. // 延迟播放背景音乐
  57. this.scheduleOnce(() => {
  58. Audio.playMusic('audio/music/game_background');
  59. }, 1.0);
  60. }
  61. /**
  62. * 游戏暂停时的音频设置示例
  63. */
  64. public onGamePause() {
  65. // 暂停背景音乐
  66. Audio.pauseMusic();
  67. // 播放暂停音效
  68. Audio.playSFX('audio/sfx/pause');
  69. }
  70. /**
  71. * 游戏恢复时的音频设置示例
  72. */
  73. public onGameResume() {
  74. // 恢复背景音乐
  75. Audio.resumeMusic();
  76. // 播放恢复音效
  77. Audio.playSFX('audio/sfx/resume');
  78. }
  79. /**
  80. * 游戏结束时的音频设置示例
  81. */
  82. public onGameOver() {
  83. // 停止背景音乐
  84. Audio.stopMusic();
  85. // 播放游戏结束音效
  86. Audio.playSFX('audio/sfx/game_over');
  87. // 延迟播放结束音乐
  88. this.scheduleOnce(() => {
  89. Audio.playMusic('audio/music/game_over', false);
  90. }, 1.0);
  91. }
  92. /**
  93. * 武器发射音效示例
  94. */
  95. public onWeaponFire(weaponType: string) {
  96. switch (weaponType) {
  97. case 'pea_shooter':
  98. Audio.playSFX('audio/pea_shot', 0.7);
  99. break;
  100. case 'sharp_carrot':
  101. Audio.playSFX('audio/carrot_shot', 0.8);
  102. break;
  103. case 'saw_grass':
  104. Audio.playSFX('audio/saw_shot', 0.9);
  105. break;
  106. case 'watermelon_bomb':
  107. Audio.playSFX('audio/bomb_launch', 1.0);
  108. break;
  109. case 'boomerang_plant':
  110. Audio.playSFX('audio/boomerang_throw', 0.8);
  111. break;
  112. case 'hot_pepper':
  113. Audio.playSFX('audio/pepper_launch', 0.9);
  114. break;
  115. case 'cactus_shotgun':
  116. Audio.playSFX('audio/cactus_shot', 1.0);
  117. break;
  118. case 'okra_missile':
  119. Audio.playSFX('audio/missile_launch', 1.0);
  120. break;
  121. default:
  122. Audio.playSFX('audio/sfx/default_shot', 0.7);
  123. break;
  124. }
  125. }
  126. /**
  127. * UI交互音效示例
  128. */
  129. public onUIInteraction(interactionType: string) {
  130. switch (interactionType) {
  131. case 'button_click':
  132. Audio.playSFX('audio/sfx/button_click', 0.6);
  133. break;
  134. case 'button_hover':
  135. Audio.playSFX('audio/sfx/button_hover', 0.4);
  136. break;
  137. case 'menu_open':
  138. Audio.playSFX('audio/sfx/menu_open', 0.7);
  139. break;
  140. case 'menu_close':
  141. Audio.playSFX('audio/sfx/menu_close', 0.7);
  142. break;
  143. case 'slider_change':
  144. Audio.playSFX('audio/sfx/slider_change', 0.3);
  145. break;
  146. case 'checkbox_toggle':
  147. Audio.playSFX('audio/sfx/checkbox_toggle', 0.5);
  148. break;
  149. }
  150. }
  151. /**
  152. * 动态调整音量示例
  153. */
  154. public adjustVolumeBasedOnGameState(gameState: string) {
  155. switch (gameState) {
  156. case 'menu':
  157. Audio.setMusicVolume(0.6);
  158. Audio.setSFXVolume(0.8);
  159. break;
  160. case 'playing':
  161. Audio.setMusicVolume(0.4);
  162. Audio.setSFXVolume(1.0);
  163. break;
  164. case 'paused':
  165. Audio.setMusicVolume(0.2);
  166. Audio.setSFXVolume(0.6);
  167. break;
  168. case 'game_over':
  169. Audio.setMusicVolume(0.8);
  170. Audio.setSFXVolume(0.7);
  171. break;
  172. }
  173. }
  174. }