您的位置:首页 >> Cocos2d-x >> 和屌丝一起学cocos2dx-音乐音效

和屌丝一起学cocos2dx-音乐音效

[ 孤狼 | 2015-02-09 17:23:56 | Cocos2d-x | 2786°C | 0条评论 ]
声 明

本教程仅用于初学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的环境



本节DEMO下载


转载请注明出处:http://gl.paea.cn/n.php?n=30
 
如您看得高兴,欢迎随意投喂,让我们坚持创作!
赞赏一个鸡腿
还没有人留下遗迹
综合 · 搜索