cocos2d-x 3.0 背景音乐与音效
来源:互联网 发布:崩坏3矩阵空间 编辑:程序博客网 时间:2024/05/19 01:07
***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************
声明:
本文章用VS2012编译,cocos2d-x 3.0 版本。
我也是新手,如有错误,欢迎指出,共同进步。
嗯哼~ 这次学习背景音乐和音效的使用~
是不是好开心的呢!
照旧,首先新建一个工程~(啥?怎么建?!。。。,出门,往前找)
首先,要知道,cocos2d-x为音乐,音效等单独成立一个类,直接头文件包含过来即可——SimpleAudioEngine.h
里面的成员函数有:
——关于背景音乐:
//预加载背景音乐SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("music/xxxx.mp3");//开始播放背景音乐,true表示循环SimpleAudioEngine::sharedEngine()->playBackgroundMusic("music/xxxx.mp3",true);//停止背景音乐,这是一个缺省参数函数,传参表示是否释放音乐文件SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();//暂停背景音乐SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();//重头调用背景音乐SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();//返回布尔型参数,表示是否在放着背景音乐SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying()//设置音量0.0-1.0SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5);
——关于音效
//预加载音效SimpleAudioEngine::sharedEngine()->preloadEffect("music/xxxx.mp3");//开始播放背景音效,false表示不循环SimpleAudioEngine::sharedEngine()->playEffect("music/xxxx.mp3",false);//停止音效,可以选择单独停掉一个音效,这个值是由playEffect返回的SimpleAudioEngine::sharedEngine()->stopEffect(m_nSoundId);//停止全部音效SimpleAudioEngine::sharedEngine()->stopAllEffects();//暂停单个音效SimpleAudioEngine::sharedEngine()->pauseEffect(m_nSoundId);//重新开始音效SimpleAudioEngine::sharedEngine()->resumeEffect(m_nSoundId);//暂停全部音效SimpleAudioEngine::sharedEngine()->pauseAllEffects();//重新开始全部音效SimpleAudioEngine::sharedEngine()->resumeAllEffects();//设置音效音量0.0-1.0SimpleAudioEngine::sharedEngine()->setEffectsVolume(0.5);//卸载音效SimpleAudioEngine::sharedEngine()->unloadEffect("music/xxxx.mp3");
其他的,看一看API文档吧
要注意一下,光加了SimpleAudioEngine.h头文件还不管用,在调用函数时,
也要加CocosDenshion命名空间
using namespace CocosDenshion;也可以在每个SimpleAudioEngine前面加 CocosDenshion::
加音乐,先加两个按钮,一个开关按钮,音乐的开与关,一个音效按钮,
本博文使用素材及代码,会在文章末尾给出。
开关按钮,示意(有些简陋,见谅呀~。~):
开关按钮的定义:
// 添加 声音 的开关按钮MenuItemImage *_turnOn,*_turnOff;_turnOn = MenuItemImage::create( "button_voi_on.png", "button_voi_on.png");_turnOff = MenuItemImage::create("button_voi_off.png","button_voi_off.png"); MenuItemToggle *toggleItem = MenuItemToggle::createWithCallback(CC_CALLBACK_1(HelloWorld::menuMusicCallback, this), _turnOn,_turnOff, NULL);toggleItem->setScale(0.3f);toggleItem->setPosition(Point(visibleSize.width/3,visibleSize.height/2));
很简单理解吧,定义两个按钮,按钮两个图片分别是 常规显示和点击时候的显示。
因为是开关按钮,要用MenuItemToggle来关联一下,别忘了在.h中声明回调函数哟。
下面两行,一个是我的图片资源太大了,缩小了一下,第二个就是放置的位置。
还有实现,音效的按钮,这次选的音乐是——经典中的经典 超级玛丽 的音乐,音效是 吃生命蘑菇的那个音效
当然,图片必须的用个大绿蘑菇啦~
添加小蘑菇按钮:
// 添加小蘑菇按钮 auto moguItem = MenuItemImage::create( "mogu_1.png", "mogu_2.png", CC_CALLBACK_1(HelloWorld::menuMoguCallback, this)); moguItem->setPosition(Point(visibleSize.width*2/3,visibleSize.height/2));
然后,预加载背景音乐和音效:
// 预加载背景音乐和音效SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("music/back_music.mp3"); SimpleAudioEngine::sharedEngine()->preloadEffect("music/eat_mogu.mp3");
其实,这一步不写也行,因为我们内容很少,可以直接去找,费时不多。
但如果以后东西多了,避免卡、慢,就需要预加载一下了。
init里,先播放一下音乐:
// 先默认播放背景音乐SimpleAudioEngine::sharedEngine()->playBackgroundMusic("music/back_music.mp3", true);// bool类型,判断背景音乐是否暂停isPause=false;
这里的isPause是在头文件中定义的,用处是判断音乐是否已暂停。
两个回调函数:
void HelloWorld::menuMusicCallback( cocos2d::Ref* pSender ){if( isPause==false ){SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();isPause=true;}else{SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();isPause=false;}}void HelloWorld::menuMoguCallback( cocos2d::Ref* pSender ){SimpleAudioEngine::sharedEngine()->playEffect("music/eat_mogu.mp3"); }
如果,足够细心,会发现,SimpleAudioEngine里有函数来显示,当前背景音乐是否播放:
//返回布尔型参数,表示是否在放着背景音乐SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying()
为什么,要设置一个变量来管理呢?
这个,我当时在这出了问题,后来往前一直找,发现,
<span style="font-size:18px;">bool SimpleAudioEngine::isBackgroundMusicPlaying(){ return sharedMusic().IsPlaying();}</span>
继续往前找:
bool MciPlayer::IsPlaying(){ return _playing;}
而在MciPlayer类中,
_playing 只有在Stop时,才会返回false,否则永远返回true
void MciPlayer::Stop(){ _SendGenericCommand(MCI_STOP); _playing = false;}
而当调用Stop后,_playing永远是false,变不回来true。
所以,这里面的程序,并不是我们想象的那样用。
解决方法:要么,自己改了MciPlayer这个类,要么就像我这样,用一个bool变量搞定。
噢,对了,还有对音乐的释放:
SimpleAudioEngine::sharedEngine()->end();
这样代码就搞定啦,
可以运行一下看看,
听着超级玛丽的激情音乐呀
点一下,小绿蘑菇,就加了一条命呢~
哇咔咔,今天就到这里了。
本博文所用资源,代码可在此处下载 → http://download.csdn.net/detail/lx417147512/7855969
***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************
- cocos2d-x 3.0 背景音乐与音效
- 【cocos2d-x游戏开发】背景音乐与音效
- Cocos2d-x背景音乐和音效
- Cocos2d-x实例:设置背景音乐与音效- AppDelegate实现
- Cocos2d-x实例:设置背景音乐与音效-HelloWorld场景实现
- Cocos2d-x实例:设置背景音乐与音效-设置场景实现
- cocos2d-x播放背景音乐和战斗音效
- Cocos2d-x如何播放背景音乐和音效
- cocos2d-x播放背景音乐和战斗音效
- cocos2d-x 播放背景音乐以及音效
- 【cocos2d-x入门实战】背景音乐和音效
- 【cocos2d-x入门实战】背景音乐和音效
- 08.cocos2d-x背景音乐和音效
- Cocos2d-JS 中游戏背景音乐与音效
- 最新Cocos2d-x3.x播放音效与背景音乐以及手机游戏震动特效
- cocos2d-x 2.x 如何播放背景音乐和短小音效
- 【amazing cocos2d-x 3.0之十九】游戏的背景音乐和音效
- cocos2d-x入门(5)-添加背景音乐和攻击音效
- 内存:栈与堆
- 写在开始,追梦
- RailsCasts18 Looping Through Flash 使用循环展现flash
- Zoj1201
- C语言产生随机数
- cocos2d-x 3.0 背景音乐与音效
- 小黑小波比.nodejs技巧
- 运筹学在七十年代的失败
- ORACLE 数据库导入、导出(备份、恢复)
- Linux 中页的回收
- 10个强大的Apache开源模块
- uva 1399 - Puzzle(AC自动机)
- TCP/IP详解--三次握手和四次握手 Dos攻击
- java中static作用详解