88 lines
2.1 KiB
TypeScript
88 lines
2.1 KiB
TypeScript
/**
|
||
* 游戏开发者:程序员加菲猫
|
||
* 游戏名称:Like A Dino!
|
||
*/
|
||
|
||
import { _decorator, Component, AudioClip } from "cc";
|
||
import { EventDispatcher } from "../libs/EventDispatcher";
|
||
import { SpeedAudioPlayer } from "../libs/SpeedAudioPlayer";
|
||
import { GlobalData } from "../config/GlobalData";
|
||
|
||
const { ccclass, property } = _decorator;
|
||
|
||
@ccclass("MusicManager")
|
||
export class MusicManager extends Component {
|
||
//音频播放器
|
||
private audioPlayer: SpeedAudioPlayer = null;
|
||
|
||
//音频剪辑列表
|
||
@property({
|
||
type: [AudioClip],
|
||
tooltip: "音频剪辑列表",
|
||
})
|
||
audioClips: AudioClip[] = [];
|
||
|
||
//当前选择的音频剪辑索引
|
||
private currentAudioClipIndex: number = 0;
|
||
|
||
async onLoad() {
|
||
//设置当前选择的音频剪辑
|
||
this.currentAudioClipIndex = GlobalData.selectedMusicID - 1;
|
||
//初始化音频播放器
|
||
this.audioPlayer = new SpeedAudioPlayer();
|
||
//初始化音频
|
||
await this.audioPlayer.init(this.audioClips[this.currentAudioClipIndex]);
|
||
}
|
||
|
||
start() {
|
||
//监听游戏暂停事件
|
||
EventDispatcher.getTarget().on(
|
||
EventDispatcher.GAME_PAUSE,
|
||
this.pause,
|
||
this,
|
||
);
|
||
//监听游戏继续事件
|
||
EventDispatcher.getTarget().on(
|
||
EventDispatcher.GAME_RESUME,
|
||
this.resume,
|
||
this,
|
||
);
|
||
//监听游戏结束事件
|
||
EventDispatcher.getTarget().on(EventDispatcher.GAME_OVER, this.stop, this);
|
||
}
|
||
|
||
//播放音乐
|
||
async play() {
|
||
//播放之前判断是否需要切换音频
|
||
if (this.currentAudioClipIndex !== GlobalData.selectedMusicID - 1) {
|
||
//切换音频
|
||
this.currentAudioClipIndex = GlobalData.selectedMusicID - 1;
|
||
//初始化音频
|
||
await this.audioPlayer.changeAudioClip(
|
||
this.audioClips[this.currentAudioClipIndex],
|
||
);
|
||
}
|
||
// 初始速率播放
|
||
this.audioPlayer.play(GlobalData.speedRate);
|
||
// 设置初始音量
|
||
this.audioPlayer.setVolume(1.0);
|
||
}
|
||
|
||
//暂停音乐
|
||
pause() {
|
||
this.audioPlayer.pause();
|
||
}
|
||
|
||
//停止音乐
|
||
stop() {
|
||
this.audioPlayer.stop();
|
||
}
|
||
|
||
//继续播放音乐
|
||
resume() {
|
||
this.audioPlayer.resume();
|
||
}
|
||
|
||
update(deltaTime: number) {}
|
||
}
|