游戏开发中如何使用CocosCreator进行音效处理


Posted in Javascript onApril 14, 2021

在游戏开发中,我们经常需要使用音效来营造游戏氛围,因此本文给大家总结下 Cocos Creator 游戏开发中音效组件的封装和使用。

一、 Cocos Creator 中音频播放基础

1. 基础知识

游戏开发中如何使用CocosCreator进行音效处理

【1】AudioSource 组件官方文档:http://docs.cocos.com/creator/manual/zh/audio/audio.html

【2】cc.audioEngine官方文档:http://docs.cocos.com/creator/manual/zh/audio/audio.html

Cocos Creator 提供两种音频播放方式,AudioEngine 与 AudioSource 都能播放音频,它 们的区别在于 AudioSource 是组件,可以添加到场景中,由编辑器设置。而 AudioEngine 是 引擎提供的纯 API,只能在脚本中进行调用。

共同点:本质都是处理 AudioClip 音频资源,需要在 Cocos Creator 编辑器中挂载组件。

个人建议使用这个来替换 AudioSource 组件播放声音,接口齐全,测试有效,可以自己 封装一个类似 AudioSource 组件的脚本来使用。

方式一:使用 AudioSource 组件播放

创建一个空节点,在这个空节点上,添加一个 其他组件 -> AudioSource

在脚本上预设好 AudioSource,并且根据实际需求,完善脚本的对外接口,如下

cc.Class({

	properties: {

		audioSource: {

			type: cc.AudioSource,
			default: null

		},
	},
	play() {

		this.audioSource.play();

	},
	pause() {

		this.audioSource.pause();

	},
});

方式二:使用 AudioEngine 播放

在脚本内定义一个 audioClip 资源对象,如下示例中 properties 对象内。

直接使用 cc.audioEngine.play(audio, loop, volume); 播放。如下示例中 onLoad 中。

cc.Class({

	properties: {

		audio: {

			default: null,
			type: cc.AudioClip

		}

	},
	onLoad() {

		this.current = cc.audioEngine.play(this.audio, false, 1);

	},
	onDestroy() {

		cc.audioEngine.stop(this.current);

	}

});

AudioEngine 播放的时候,需要注意这里的传入的是一个完整的 AudioClip 对象(而不 是 url)。所以我们不建议在 play 接口内直接填写音频的 url 地址,而是希望大家先定义 一个 AudioClip,然后在编辑器内将音频拖拽过来。

2. 常用方法

【1】组件 AudioSource

play ( ) 播放音频剪辑。

stop ( ) 停止当前音频剪辑。

pause ( ) 暂停当前音频剪辑。

resume ( ) 恢复播放。

【2】声音系统 cc.audioEngine

// 背景音乐,循环

cc.audioEngine.playMusic(source);

cc.audioEngine.stopMusic(source);

// 短音效

cc.audioEngine.playEffect(source);

cc.audioEngine.stopEffect(source);

上面的第一种方法原生平台有很多 Bug,所以我们的游戏都用的第二种方法播放声音。

二、 Cocos Creator 音效管理组件封装

1.创建音效管理类 SoundMgr.ts

const {
	ccclass,
	property
} = cc._decorator;

@ccclass

exportdefaultclassSoundMgr {

	sound_path: string = 'res/sounds/';

	// sound 中保存的是音乐的名称和音频对象的 key-value 键值对

	sounds: {
		[key: string]: any
	} = {};

	enabled: boolean = true;

	music: string = '';

	// 单例模式

	protectedstatic instance: SoundMgr;

	publicstatic getInstance(): SoundMgr {

		if (!this.instance) {

			this.instance = newSoundMgr();

		}

		returnthis.instance;

	}

	// 添加声音资源

	addSound(key: string, clip: cc.AudioClip) {

		this.sounds[key] = clip;

	}

	playFx(fxName: string) {

		if (!this.enabled) return;

		cc.audioEngine.playEffect(this.sounds[fxName], false);

	}

	playMusic(musicName: string) {

		this.music = musicName;

		if (!this.enabled) return;

		cc.audioEngine.playMusic(this.sounds[musicName], true);

	}

	stopMusic() {

		cc.audioEngine.stopMusic();

	}

	setEnabled(enabled: boolean) {

		this.enabled = enabled;

		if (this.enabled) {

			this.playMusic(this.music);

		} else {

			cc.audioEngine.stopAll();

		}

	}

	getEnable() {

		returnthis.enabled;

	}

}

2. 在初始化的时候加载音频资源

通过 Cocos Creator 可视化编辑工具,我们设置游戏场景和资源如下:

游戏开发中如何使用CocosCreator进行音效处理

因为 sounds 我们是通过代码动态加载,故我们将保存所有声音文件的 sounds 文件夹放 到 resources 文件夹内(如上图)。

然后,新建 GameMgr.ts,挂载到 Canvas 节点上。

游戏开发中如何使用CocosCreator进行音效处理

onst {
	ccclass,
	property
} = cc._decorator;

importSoundMgrfrom "SoundMgr";

@ccclass

exportdefaultclassGameMgrextends cc.Component {

	loadSounds() {

		// 注意通过代码动态加载的资源必须放到 resources 文件夹下

		cc.loader.loadResDir('sounds', cc.AudioClip, function(err, clips) {

			console.log("load clips:", clips);

			if (err) {

				console.log("err:", err);

			}

			for (let i = 0; i

				SoundMgr.getInstance().addSound(clips[i].name, clips[i]);

			}

		});

	}

	onLoad() {

		this.loadSounds();

		console.log("sounds:", SoundMgr.getInstance().sounds);

	}

	onPlayClick() {

		console.log("play");

		SoundMgr.getInstance().playMusic('spring_music');

	}

	onPauseClick() {

		console.log("pause");

		SoundMgr.getInstance().stopMusic();

	}

}

在 GameMgr 自定义组件的 onLoad 方法中,调用 loadSounds 加载游戏中所需要的所有 声音资源。同时在 GameMgr.ts 中提供播放和暂停接口方法 onPlayClick 和 onPauseClick 方法。

供播放和暂停按钮调用。

3. 播放和暂停调用

游戏开发中如何使用CocosCreator进行音效处理

4. 运行测试

游戏开发中如何使用CocosCreator进行音效处理

声音资源全部加载成功,并且点击播放和暂停按钮,都能测试通过。

游戏开发中如何使用CocosCreator进行音效处理

三、 注意事项

注意:如果音频播放相关的设置都完成后,在部分浏览器上预览或者运行时仍听不到声 音,那可能是由于浏览器兼容性导致的问题。例如:Chrome 禁用了 WebAudio 的自动播放,而音频默认是使用 Web Audio 的方式加载并播放的,此时用户就需要在 资源管理器中选中音频资源,然后在 属性检查器 中将音频的加载模式修改为 DOM Audio 才能在浏览器上正常播放。

游戏开发中如何使用CocosCreator进行音效处理

以上就是游戏开发中如何使用CocosCreator进行音效处理的详细内容,更多关于CocosCreator音效处理的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
js运动框架_包括图片的淡入淡出效果
May 11 Javascript
jQuery之日期选择器的深入解析
Jun 19 Javascript
Document:getElementsByName()使用方法及示例
Oct 28 Javascript
基于jQuery实现顶部导航栏功能
Dec 27 Javascript
bootstrap table动态加载数据示例代码
Mar 25 Javascript
Ajax验证用户名或昵称是否已被注册
Apr 05 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
Sep 22 Javascript
微信小程序实现滚动消息通知
Feb 02 Javascript
Vue SPA单页应用首屏优化实践
Jun 28 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
May 06 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
Sep 10 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
Nov 29 Javascript
详解CocosCreator项目结构机制
如何使用CocosCreator对象池
Apr 14 #Javascript
CocosCreator如何实现划过的位置显示纹理
JS监听Esc 键触发事键
Apr 14 #Javascript
jQuery实现影院选座订座效果
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
JavaScript实现复选框全选功能
You might like
一步一步学习PHP(5) 类和对象
2010/02/16 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
Json对象与Json字符串互转(4种转换方式)
2013/03/27 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
jQuery实现的背景颜色渐变动画效果示例
2017/03/24 jQuery
Vue表单验证插件的制作过程
2017/04/01 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
js处理包含中文的字符串实例
2017/10/11 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
Python subprocess模块常见用法分析
2018/06/12 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
python 读取串口数据的示例
2020/11/09 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
Chicco婴儿用品美国官网:汽车座椅、婴儿推车、高脚椅等
2018/11/05 全球购物
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
大学生实习自我鉴定
2013/12/11 职场文书
股东合作协议书
2014/04/14 职场文书
签约仪式策划方案
2014/06/02 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
单位实习介绍信
2015/05/05 职场文书
农贸批发市场管理制度
2015/08/07 职场文书