cocos2d-x游戏中音乐音效的处理
本文为firedragonpzy原创,转载务必在明显处注明:
转载自【SoftewareMyZone】原文链接:http://www.firedragonpzy.com.cn/index.php/archives/905
有关cocos2d-x游戏中音乐音效的处理一般可选两种方式:第一种,在没有进度处理的情况下,最好将音乐音效的状态设置为三种,开状态,关状态,未初始化状态,因为得判断是否首次进入场景,然后进行处理。第二种,有了进度的情况下,设置一种即可。
接下来分别说下两种的设置,关于第一种,你可以讲状态设置为三个值,0,1,2等等,但是我是个比较懒惰的人,所以我设置了两个值,bool型,true或false。这是本文的精华,大家注意哦。
首先,大家先看看CCUserDefault的头文件,如下:
/** @brief Get bool value by key, if the key doesn't exist, a default value will return. You can set the default value, or it is false. */ bool getBoolForKey(const char* pKey, bool defaultValue = false); /** @brief Get integer value by key, if the key doesn't exist, a default value will return. You can set the default value, or it is 0. */ int getIntegerForKey(const char* pKey, int defaultValue = 0); /** @brief Get float value by key, if the key doesn't exist, a default value will return. You can set the default value, or it is 0.0f. */ float getFloatForKey(const char* pKey, float defaultValue=0.0f); /** @brief Get double value by key, if the key doesn't exist, a default value will return. You can set the default value, or it is 0.0. */ double getDoubleForKey(const char* pKey, double defaultValue=0.0); /** @brief Get string value by key, if the key doesn't exist, a default value will return. You can set the default value, or it is "". */ std::string getStringForKey(const char* pKey, const std::string & defaultValue = "");
如果没有设置的bool型为false,所以我讲未初始化和开状态都设置为false,而关状态设置为true。
关于第二种,设置了进度,即可在进度处设置音乐音效的开关,如下代码:CCUserDefault *userDefault = CCUserDefault::sharedUserDefault(); if (!userDefault->getIntegerForKey(gcCURPROGRESSMARK)) { userDefault->setIntegerForKey(gcCURPROGRESSMARK, nBLOOMINGDALEFIRST ); userDefault->setIntegerForKey(gcHASICELOTUS,0); userDefault->setIntegerForKey(gcHASCRYSTAL,0); userDefault->setIntegerForKey(gcHASWINDBELL,0); userDefault->setBoolForKey( gcMUSICSTATE, true ); userDefault->setBoolForKey( gcEFFECTSTATE, true ); }
这只是音乐音效开关的设置,但是我还遇到了一个比较扯淡的问题,我在游戏音乐设置界面,将音乐关了,按Home键退出,再次进入的时候音乐竟然是打开的,而我的音乐按钮是关闭的。音乐按钮关闭是应该的,但是音乐打开确实不对的。在退出之前我明明是将音乐关掉的啊!
若你也有此疑问,那就接着往下看。
相信很多朋友们都很少关注AppDelegate.cpp吧。其实我也关注很少,偶然发现里面有这段代码,如下:
// This function will be called when the app is inactive. When comes a phone call,it's be invoked too void AppDelegate::applicationDidEnterBackground() { CCDirector::sharedDirector()->pause(); if ( MusicManager::getMusicState() ) { SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); } else { SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); } } // this function will be called when the app is active again void AppDelegate::applicationWillEnterForeground() { CCDirector::sharedDirector()->resume(); if ( MusicManager::getMusicState() ) { SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); } else { SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); } }
当然我贴出来的是我修改后的代码,Whencomesaphonecall,it'sbeinvokedtoo这就是按了home键,//thisfunctionwillbecalledwhentheappisactiveagain再次进入的时候,相信到这里大家就应该很明白了吧!
提醒:(1)在使用CCUserDefault的时候注意状态值得设置,是设置两个还是三个
(2)注意AppDelegate里面的applicationDidEnterBackground()和applicationWillEnterForeground()方法,我现在知道的就是音乐要在这里处理下,别的没有必要,要是有别的需要处理,欢迎大家评论指教……
今天就先到这里吧,呼呼……
相关推荐
一个客户要求给网站添加一个背景音乐,我用的是html5添加网页背景音乐的代码,在此记录一下以后有用。html5方法二:<videocontrols=""autoplay=""name="media&q