cocos2d-x遊戲中音樂音效的處理

firedragonpzy發表於2012-08-08
[i][b]本文為firedragonpzy原創,轉載務必在明顯處註明:
轉載自【Softeware MyZone】原文連結: http://www.firedragonpzy.com.cn/index.php/archives/905[/b][/i]

有關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();
}
}

當然我貼出來的是我修改後的程式碼,When comes a phone call,it's be invoked too這就是按了home鍵,// this function will be called when the app is active again再次進入的時候,相信到這裡大家就應該很明白了吧!

提醒:(1)在使用CCUserDefault的時候注意狀態值得設定,是設定兩個還是三個
(2)注意AppDelegate裡面的applicationDidEnterBackground()和applicationWillEnterForeground()方法,我現在知道的就是音樂要在這裡處理下,別的沒有必要,要是有別的需要處理,歡迎大家評論指教……
今天就先到這裡吧,呼呼……

相關文章