现在要管理音乐音效,要分别打开、关闭,用一个audioSource来管理合适吗?怎么做呢?求大佬指教
Cache audioSource in map of a singleton class.
Maybe give you a suggest 
const { ccclass, property } = cc._decorator;
@ccclass
export default class MusicControl extends cc.Component
{
static Musics = {
button: "button",
bg: "bg",
set: "set",
win: "win",
fail: "fail",
}
static bgmusic: cc.AudioClip
static effectList: cc.AudioClip[] = []
//获取音效是否开启
static getSoundFun()
{
let csound = cc.sys.localStorage.getItem('sounds');
if (csound == 'true' || csound == true)
return true
return false
}
//设置音效是否开启
static SetSoundFun(paras: boolean)
{
cc.sys.localStorage.setItem('sounds', paras);
paras ? this.GetResumeMusic() : this.GetPauseMusic();
}
// 暂停音乐
static GetPauseMusic()
{
if (cc.audioEngine.isMusicPlaying())
cc.audioEngine.pauseMusic();
}
// 恢复播放音乐
static GetResumeMusic()
{
if (!cc.audioEngine.isMusicPlaying())
cc.audioEngine.resumeMusic(); //恢复播放音乐
}
//播放背景音乐
static PlayMusic(file: string)
{
console.log("播放背景音乐")
console.log(this.getSoundFun())
if (!this.getSoundFun())
return;
if (this.bgmusic)
{
cc.audioEngine.playMusic(this.bgmusic, true);
} else
{
let musicFile = "Musics/" + file;
console.log("//预加载并播放")
//预加载并播放
cc.resources.load(musicFile, cc.AudioClip, (err, clip: cc.AudioClip) =>
{
this.bgmusic = clip;
cc.audioEngine.playMusic(this.bgmusic, true);
});
}
// cc.audioEngine.setMusicVolume(0.5)
}
//播放音效
static PlaySound(filename: string)
{
if (!this.getSoundFun())
return;
// 获取一个资源路径
let file = "Musics/" + filename;
if (this.effectList[filename])
{
cc.audioEngine.playEffect(this.effectList[filename], false);
} else
{
//预加载并播放
cc.resources.load(file, cc.AudioClip, (err, clip: cc.AudioClip) =>
{
cc.audioEngine.playEffect(clip, false);
this.effectList[filename] = clip
});
};
}
// update (dt) {}
}
也许是你想要的
cc.audioEngine 3.3.1弃用了。
哦哦,一直用的2.4.6,没关注, 那这样的话就搞个常驻节点啊,原理差不太多
https://docs.cocos.com/creator/3.3/manual/zh/audio-system/overview.html
官方现在推荐使用的是audioSource, 播放音乐用 play, 播放音效用 playOneShot. 但是play不带任何参数。找了好久也找不到具体的解决办法,现在准备音乐的开关用play和stop来控制,音效的开关通过保存音量大小来控制。
我现在的方案是用常驻节点,web上面audioSuorce可以不依赖节点,原生没有依赖节点会报错,同时一个音频一个对应一个audioSource组件,切换场景的时候删除
一个audioSource只能同时操作单个音频,当然如果你的游戏只能同时播放一个音频的话当我没说
现在的目标就是原生情况下,管理音乐和音效俩种音频的开启和关闭。在一个场景中,背景音乐开启时要一直播放,这时候允许播放音效。关闭音乐或者音效都不影响对方的播放。我现在做的也是做一个常驻节点,挂载了一个audioSource组件。 接下来该怎么操作呢?
我已经说了,一个音频对应一个audioSource,你可以提供音频添加和删除接口,添加音频时同时添加audioSource,然后返回一个句柄或者直接返回这个audioSource,这个句柄对应这个音频,接下来就通过句柄操作音频,然后切换场景的时候清理所有不用的音频信息
那同时播放大量音效的时候,是不是需要创建大量的audioSource,会对性能造成影响吗
按照cocos的用法现在只能这样搞,根本不用考虑其他的,因为没路可走,顶多回收利用audioSrouce,要么就用第三方
不能搞个数组吗???
或者用一个audioSource用来播放背景音乐,然后用一个audioSource播放音效,使用playOneShot接口,但是音效不能中途停止,这样最简单
能具体说说嘛
也考虑过,但是很不优雅
,就没用。我试试吧
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。