欢迎光临散文网 会员登陆 & 注册

游戏开发中的音乐和音效怎么去制作

2022-09-21 15:18 作者:游戏开发RAIN  | 我要投稿

游戏开发中分背景音乐和音效,同时每个游戏的设置里面都会有开关,是否开关音乐和音效,所以我们做音乐管理模块的时候都要充分的考虑进去。Cocos Creator提供了一个AudioSource组件用来播放音乐或音效,我们整个声音管理模块就利用它来支撑最终的音乐音效的播放。

我们创建一个音乐管理的单例组件类, 在框架初始化的时候,我们把它实例化出来,加到GameApp这个节点上。然后调用管理类单例的Init接口,在Init接口中,往GameApp节点上添加一些AudioSource的组件实例。添加几个,可以根据设计来决定,可以动态的扩展,也可以写死固定的几个AudioSource,这样整个游戏就固定了能支持多少个音效同时播放。我在这个项目里面设置了一个MAX_SOUNDS为8。背景音乐专门有一个单独放置AudioSource组件用来播放。同时我们要从本地获取用户的设置,看看是否禁止播放背景音乐和音效。所以声音管理类的数据成员如图

MAX_SOUNDS: 最大能支持的同时播放的音效的数目,目前是8,如果是第9个音效播放的话,就会把原来的第0个给冲掉。

MUSIC_MUTE_KEY: 从本地读取背景是否音乐静音的key,用这个key去从本地读取配置;

SOUND_MUTE_KEY: 从本地读取音效是否静音的key, 用这个key从本地读取配置;

nowIndex: 当前音效使用到了第几个音效组件实例,如果超过MAX_SOUNDS,又从0开始,每次播放一个音效nowIndex会往后+1, 这样8个AudioSource组件轮流播放音效,最多同时支持8个音效。如果超过8个,又从第0个开始;

sounds: 音效的所有AudioSource组件集合;

bgMusic: 播放背景音乐的AudioSource组件;

isMusicMute: 背景音乐是否静音,初始值从本地配置读取;

isSoundMute: 音效是否静音, 初始值从本地配置读取;

在Init函数里面我们初始化对应的AudioSource组件实例和相关参数,如代码截图:

28~31行for循环,将AudioSource组件实例创建出来,并加入到节点(GameApp)上。33行创建播放背景音乐的AudioSource声音组件的实例。36~45行从本地读取是否静音的初始值。

接下来分析一下播放音乐音效的接口playBgMusic/stopBgMusic,


playBgMusic:

clip: 函数参数,声音资源对象;

isLoop: 函数参数,是否循环播放;

进入函数后,将声音clip设置到背景音乐的AudioSource组件实例上,如果是静音,就把声音的大小调成0,然后调用AudioSource组件的play函数。

stopBgMusic: 直接调用背景音乐组件实例的停止接口,停止播放。


接下来分析接口playSound,如图

如果当前音效静音,直接返回不播放,否者以当前nowIndex为索引的AudioSource来播放声音,然后再nowIndex++, 下一次播放音效就到下一个AudioSource组件了。如果nowIndex超过了最大的数目,又从0开始,这样最早的那个音效就会被冲掉,因为游戏音效本身时间就短,所以这种设计方式也是可以的,简单方便。

接下来分析接口setMusicMute/setSoundMute

当用户在设置界面设置音乐音效是否静音的时候,可以调用这两个函数,设置变量值,然后再把最新的变量值保存到本地存储,下次游戏启动的时候能获取上一次保存的值。

本节的声音管理模块设计就讲解到这里,大家可以对着代码来阅读,掌握巩固好这些代码。

欢迎加入我的游戏开发交流群,

给你分享更多游戏源码及其他学习素材


游戏开发中的音乐和音效怎么去制作的评论 (共 条)

分享到微博请遵守国家法律