cocos的音乐与音效及其实例
游戏里的声音按功能分为:
音乐 Music(BGM)背景音乐
音效 Audio当执行动作或响应的被脚本调用的音效
配音 Voice
播放声音,一般为2种办法:
- Audio source组件,一般适用于背景音乐播放,在节点上添加Audio source组件,设置相关属性即可
- Audio Engine ApI播放即 cc. audioEngine.play(clip,loop,volume)一般适用音效和配音的播放
AudioSource的设置:
Clip:音频素材
Volume:音量,介于[0-1]之间
Loop:是否循环播放
Mute:是否静音
Play On load:是否在激活时自动播放
Preload:是否预加载(先加载完整、后播放)
使用API来控制 Audiosource组件
let audioSource = node getComponent(cc. AudioSource)
audioSource.mute= true
AudioEngine包含多个API,可以实现更精细的控制
示例:
let audiold=cc.audioEngine.play(…)
cc.audioEngine.pause(audiold)
cc.audioEngine.resume(audiold)
cc.audioEngine.stop(audiold)
cc.audioEngine.setFinishCallback(audiold,callback)
cc.audioEngine.play方法会返回一个audioId
其中,audiold可以代表一路音频(一个播放线程)
直接使用cc. audioEngine.play()会出现混音的效果,即连续触发音频会让上一段声音未结束,下一段声音就开始播放,为解决这个问题,增加audioId变量,使用cc.audioEngine.setFinishCallback(audiold,callback)回调函数让改音频的播放线程为null;
onLoad () {
if(this.audio==null){
cc.log("音效资源缺失");
return;
}
this.node.on('touchstart',this.audioPlay,this);
}
audioPlay(){
if(this.audioId!=null){
return;
}
let self=this;
this.audioId=cc.audioEngine.play(this.audio,false,1);
cc.audioEngine.setFinishCallback(this.audioId,function(){
self.audioId=null;
})
}
注意闭包的写法,函数内嵌套的函数的this访问的并不是最外层的this,需要在外部用另一个指针self指向this的全局对象
听音辨字实例
初步场景搭建
在每个方框内动态生成汉字
设置一个全局变量optionNodes存放当前画面中的四个汉字,在通过一个方法随机从字符库中取得四个汉字赋值给optionNodes
charPool : string[] = [
'大', '小', '多', '少', '哥', '弟', '姐', '妹', '爸', '妈', '爷', '奶',
'天', '地', '日', '月', '春', '夏', '秋', '冬'
];
optionNodes:cc.Node[]=[];
onLoad () {
for(let i=1;i<=4;i++){
this.optionNodes[i]= cc.find('Canvas/选项面板/选项'+i);
//let node : cc.Node = cc.find('Canvas/选项面板/选项' + (i+1));
// this.optionNodes.push( node );
}
this.nextRound()