300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > CocosCreator 音效管理器

CocosCreator 音效管理器

时间:2020-01-20 15:18:03

相关推荐

CocosCreator 音效管理器

代码都有注释不再赘述

import { _decorator, Node, AudioClip, AudioSource, game, find } from "cc";import { Dictionary } from "../core/Dictionary";const { ccclass, property } = _decorator;/**最多有几个音效播放器*/const MAX_SOUNDS: number = 8/*** 音效管理器*/@ccclass("AudioMgr")export class AudioMgr {static _instance: AudioMgr;static get ins() {if (this._instance) {return this._instance;}this._instance = new AudioMgr();return this._instance;}/**音效的常驻节点*/private _persistRootNode: Node = null;//bgm音效全局唯一一个private _music: AudioSource = null//sound音效可以有多个private _sounds: AudioSource[] = null/**bgm静音 0没静音 1静音*/private _music_muted: number = 0/**sound静音 0没静音 1静音*/private _sound_muted: number = 0/**bgm音量*/private _music_volume: number = 1/**sound音量*/private _sound_volume: number = 1/**当前播放的音效索引用以控制使用不同的AudioSource*/private _now_soundid: number = 0/**当前播放的bgm音效名字*/private _cur_music_name: string = ""//存储所有的音效片段private music_clips: Dictionary<string, AudioClip>init() {if (this._persistRootNode) return; //避免切换场景初始化报错this._persistRootNode = find("Canvas")game.addPersistRootNode(this._persistRootNode)this._sounds = []this.music_clips = new Dictionary<string, AudioClip>()/*** 读取本地存储的数据* */this._music = this._persistRootNode.addComponent(AudioSource)//获取bgm的音量this._music.volume = this._music_volume//获取bgm是否存储静音this._music.volume = this._music_muted == 1 ? 0 : this._music_volume//获取sounds列表for (let i = 0; i < MAX_SOUNDS; i++) {this._sounds[i] = this._persistRootNode.addComponent(AudioSource)this._sounds[i].volume = this._sound_volumethis._sounds[i].volume = this._sound_muted == 1 ? 0 : this._sound_volume}}/*** @param audioName 音效名字* @param isLoop 是否循环播放* @protected 播放音效*/playMusic(audioName: string, isLoop: boolean = true) {if (this._cur_music_name == audioName) {return}let call = (clip) => {this._music.clip = nullthis._music.clip = clipthis._music.loop = isLoopthis._music.play()if (!this.music_clips.containsKey(audioName)) {this.music_clips.add(audioName, clip)}}if (this.music_clips.containsKey(audioName)) {call(this.music_clips.getValue(audioName))} else {let bundleName = "base.audio"let path = bundleName + "/" + audioNameassetManager.loadBundle(bundleName,(err, bundle) => {bundle.load(path,AudioClip,(err: any, clip: any)=>{if (err) {console.error("loadAudioClip" + err);}else{call(clip)}});})}}/*** @param audioName 音效名字* @param isLoop 是否循环播放* @protected 播放音效*/playSound(audioName: string, isLoop: boolean = false) {let call = (clip) => {this._sounds[this._now_soundid].clip = nullthis._sounds[this._now_soundid].clip = clipthis._sounds[this._now_soundid].loop = isLoopthis._sounds[this._now_soundid].play()if (!this.music_clips.containsKey(audioName)) {this.music_clips.add(audioName, clip)}this._now_soundid = this._now_soundid + 1 >= this._sounds.length ? 0 : this._now_soundid + 1}if (this.music_clips.containsKey(audioName)) {call(this.music_clips.getValue(audioName))} else {let bundleName = "base.audio"let path = bundleName + "/" + audioNameassetManager.loadBundle(bundleName,(err, bundle) => {bundle.load(path,AudioClip,(err: any, clip: any)=>{if (err) {console.error("loadAudioClip" + err);}else{call(clip)}});})}}/*** 停止播放bgm*/stopMusic() {this._music.stop()this._music.clip = null}/*** 停止播放所有的sound*/stopAllSound() {for (let i = 0; i < this._sounds.length; i++) {this._sounds[i].stop()this._sounds[i].clip = null}this._now_soundid = 0}/*** * @param mute 是否静音music*/setMusicMute(mute: boolean) {if (mute == (this._music_muted == 1)) {return}this._music_muted = mute ? 1 : 0this._music.volume = mute ? this._music_volume : 0//存储music静音 this._music_muted}/*** * @param mute 是否静音sound*/setSoundMute(mute: boolean) {if (mute == (this._sound_muted == 1)) {return}this._sound_muted = mute ? 1 : 0for (let i = 0; i < this._sounds.length; i++) {this._sounds[i].volume = mute ? this._sound_volume : 0}//存储sound静音 this._sound_muted}/*** * @param value 设置音乐声音大小*/setMusicVolume(value: number) {this._music.volume = valuethis._music_volume = value//存储music音量大小 this._music_volume}/*** * @param value 设置sound声音大小*/setSoundVolume(value: number) {this._sound_volume = valuefor (let i = 0; i < this._sounds.length; i++) {this._sounds[i].volume = value}//存储sound音量大小 this._sound_volume}/*** * @returns 返回bgm静音状态*/getMusicMute() {return this._music_muted}/*** * @returns 返回sound音效静音状态*/getSoundMute() {return this._sound_muted}/*** * @returns 返回bgm声音大小*/getMusicVolume() {return this._music_volume}/*** * @returns 返回sound音效声音大小*/getSoundVolume() {return this._sound_volume}}

Dictionary请查看另外一篇文章CocosCreator Dictionary_小张不爱写代码的博客-CSDN博客

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。