声 明本教程仅用于初学cocos2dx同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用cocos2dx版本为2.1.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。gl.paea.cn版权所有。
大家好,欢迎回到“和屌丝一起学cocos2dx”系列教程,上节我们说到了“碰撞”不知道大家有没有做出效果来呢,这里还是提示一下,圆形碰撞是很常用的哦。下面我们就开始今天的课程吧,又是一个最常用的东东--音乐音效。
【一】:特性
在cocos2dx开发中,我们音乐的选择也是有区别的,因为虽然cocos2dx实现了跨平台,但是各个平台之间的标准还是乱七八糟。没有人任何机构来统一规范,所以导致我们的音乐要针对客户端准备。在游戏中,我们能听到的音乐有2中,1是长长的背景音乐,2是短短的特效音效。那么这两种选用什么格式的最好呢?
背景音乐
android Mp3 MID WAV
ios Mp3 CAF
音效
android OGG(仅支持)
ios CAF
这里只是推荐不是支持列表哦,可以看出来,Mp3由于他的特性所以最适合做背景音乐,而音效由于各个平台的不同,所以最佳选择也就不同了。当然了,这都不是问题,因为就算你们各个平台直接不能互通,万能的中国人早在十几年前就发明了音乐格式转换了,比如格式工厂等等,丫丫,小菜儿。
【二】:函数
背景音乐
preloadBackgroundMusic(音乐路径); //预加载音乐
playBackgroundMusic(音乐路径,是否重复); //播放音乐
pauseBackgroundMusic() //暂停
stopBackgroundMusic() //停止
resumeBackgroundMusic() //继续播放
rewindBackgroundMusic() //从头播放
isBackgroundMusicPlaying() //获取背景音乐是否在播放
getBackgroundMusicVolume() //获取音量
setBackgroundMusicVolume() //设置音量
音效
preloadEffect(音效路径) //预加载音效
unloadEffect(音效路径) //释放音效文件
playEffect(音效路径,是否重复) //播放音效
stopEffect(音效ID) //停止
stopAllEffects() //全部停止
pauseEffect(音效ID) //暂停
pauseAllEffects() //全部暂停
resumeEffect(音效ID) //继续播放
resumeAllEffects() //全部继续播放
getEffectsVolume() //获取音量
setEffectsVolume() //设置音量
【三】:示例
1.新建项目 musicdemo
2.加载3张图片
musicdemo.h
1.包含音乐类和扩展类
#include "SimpleAudioEngine.h"
#include "cocos-ext.h"
2.引用命名空间cocos2d::extension
using namespace cocos2d::extension;
3.写3个对应的回调函数
void playmusic(CCObject * sender,CCControlEvent);
void pausemusic(CCObject * sender,CCControlEvent);
void stopmusic(CCObject * sender,CCControlEvent);
musicdemo.cpp
1.添加3个按钮
//创建3个按钮
CCScale9Sprite* sp1 = CCScale9Sprite::create("1.png");
CCScale9Sprite* sp2 = CCScale9Sprite::create("2.png");
CCScale9Sprite* sp3 = CCScale9Sprite::create("3.png");
CCControlButton * b1=CCControlButton::create(sp1);
CCControlButton * b2=CCControlButton::create(sp2);
CCControlButton * b3=CCControlButton::create(sp3);
b1->setPosition(ccp(mysize.width/2-100, mysize.height/2+100));
b2->setPosition(ccp(mysize.width/2, mysize.height/2+100));
b3->setPosition(ccp(mysize.width/2+100, mysize.height/2+100));
b1->addTargetWithActionForControlEvents(
this,
cccontrol_selector(HelloWorld::playmusic),
CCControlEventTouchDown
);
b2->addTargetWithActionForControlEvents(
this,
cccontrol_selector(HelloWorld::pausemusic),
CCControlEventTouchDown
);
b3->addTargetWithActionForControlEvents(
this,
cccontrol_selector(HelloWorld::stopmusic),
CCControlEventTouchDown
);
b1->setPreferredSize(ccp(57,57));
b2->setPreferredSize(ccp(57,57));
b3->setPreferredSize(ccp(57,57));
this->addChild(b1, 0,1);
this->addChild(b2, 0,1);
this->addChild(b3, 0,1);
2.根据当前系统判断预加载的文件
这里注意一下,在win下"/music/winback.mid"也可以找到这个音乐,但是android下不行,所以要注意开头不要加“/”
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#define MUSIC_FILE "music/winback.mid"
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_BLACKBERRY || CC_TARGET_PLATFORM == CC_PLATFORM_LINUX )
#define MUSIC_FILE "none.ogg"
#else
#define MUSIC_FILE "music/androidback.mp3"
#endif
3.预加载音乐,设置音量
//加载音乐
SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(MUSIC_FILE);
//设置默认音量
SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(1);
4.完成3个回调函数
void HelloWorld::playmusic(CCObject * sender,CCControlEvent){
SimpleAudioEngine::sharedEngine()->playBackgroundMusic(MUSIC_FILE,true);
}
void HelloWorld::pausemusic(CCObject * sender,CCControlEvent){
SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}
void HelloWorld::stopmusic(CCObject * sender,CCControlEvent){
SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
}
好了,最后我们在win上试一下,我也打好了apk包,大家可以直接下载试一下android的环境