Cocos2DX爲咱們提供了簡單易用的音樂引擎,對於簡單的使用只須要掌握libCocosDenshion庫中的SimpleAudioEngine使用便可。函數
libCocosDenshion將音樂分爲兩個大類:背景音樂和音效oop
下面就以背景音樂的實例爲例看看怎麼使用SimpleAudioEngineui
新建工程DemoMusic,去掉沒必要要的並加載bg.mp3文件到工程的Resources目錄下:this
仍是先看看SimpleAudioEngine爲咱們提供了那些方法:spa
//獲取單例對象 static SimpleAudioEngine* sharedEngine(); //釋放對象資源 static void end(); //預加載背景音樂 void preloadBackgroundMusic(const char* pszFilePath); //播放背景音樂,根據參數選擇循環播放 void playBackgroundMusic(const char* pszFilePath, bool bLoop); //中止背景音樂 void stopBackgroundMusic(bool bReleaseData); //暫停 void pauseBackgroundMusic(); //恢復 void resumeBackgroundMusic(); //獲取音量大小 float getBackgroundMusicVolume(); //設置音量大小 void setBackgroundMusicVolume(float volume);
從方法名稱就很容易的明白如何使用下面init方法修改以下:code
bool HelloWorld::init() { float fontSize = 16,startY = 10 , offset=15; ////////////////////////////// // 1. super init first if ( !CCLayer::init() ) { return false; } CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("bg.mp3"); CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); ///////////////////////////// // 2. add a menu item with "X" image, which is clicked to quit the program // you may modify it. // add a "close" icon to exit the progress. it's an autorelease object CCMenuItemImage *pCloseItem = CCMenuItemImage::create( "CloseNormal.png", "CloseSelected.png", this, menu_selector(HelloWorld::menuCloseCallback)); pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 , origin.y + pCloseItem->getContentSize().height/2)); CCMenuItem* pPlayBGMusic = CCMenuItemLabel::create( CCLabelTTF::create("Play BG Music","HiraKakuProN-W6",fontSize) , this, menu_selector(HelloWorld::menuPlayBGMusic)); pPlayBGMusic->setPosition(ccp(visibleSize.width/2-pPlayBGMusic->getContentSize().width/2,startY)); CCMenuItem* pStopBGMusic = CCMenuItemLabel::create( CCLabelTTF::create("Stop BG Music","HiraKakuProN-W6",fontSize) , this, menu_selector(HelloWorld::menuStopBGMusic)); pStopBGMusic->setPosition(ccp(visibleSize.width/2-pStopBGMusic->getContentSize().width/2,startY+offset)); CCMenuItem* pPauseBGMusic = CCMenuItemLabel::create( CCLabelTTF::create("Pause BG Music","HiraKakuProN-W6",fontSize) , this, menu_selector(HelloWorld::menuPauseBGMusic)); pPauseBGMusic->setPosition(ccp(visibleSize.width/2-pPauseBGMusic->getContentSize().width/2,startY+offset*2)); CCMenuItem* pResumeBGMusic = CCMenuItemLabel::create( CCLabelTTF::create("Resume BG Music","HiraKakuProN-W6",fontSize) , this, menu_selector(HelloWorld::menuResumeBGMusic)); pResumeBGMusic->setPosition(ccp(visibleSize.width/2-pResumeBGMusic->getContentSize().width/2,startY+offset*3)); CCMenuItem* pVolumeAddBGMusic = CCMenuItemLabel::create( CCLabelTTF::create("Volume + BG Music","HiraKakuProN-W6",fontSize) , this, menu_selector(HelloWorld::menuVolumeAddBGMusic)); pVolumeAddBGMusic->setPosition(ccp(visibleSize.width/2-pVolumeAddBGMusic->getContentSize().width/2,startY+offset*4)); CCMenuItem* pVolumeSubBGMusic = CCMenuItemLabel::create( CCLabelTTF::create("Volume - BG Music","HiraKakuProN-W6",fontSize) , this, menu_selector(HelloWorld::menuVolumeSubBGMusic)); pVolumeSubBGMusic->setPosition(ccp(visibleSize.width/2-pVolumeSubBGMusic->getContentSize().width/2,startY+offset*5)); // create menu, it's an autorelease object CCMenu* pMenu = CCMenu::create(pCloseItem,pPlayBGMusic,pStopBGMusic,pPauseBGMusic ,pResumeBGMusic,pVolumeAddBGMusic , pVolumeSubBGMusic , NULL); pMenu->setPosition(CCPointZero); this->addChild(pMenu, 1); return true; }
幾個菜單回調函數:orm
void HelloWorld::menuVolumeSubBGMusic(CCObject* pSender) { float volume=CocosDenshion::SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume(); CocosDenshion::SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(volume-0.2); CCLOG ("volume - : %f", CocosDenshion::SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume()); } void HelloWorld::menuVolumeAddBGMusic(CCObject* pSender) { float volume=CocosDenshion::SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume(); CocosDenshion::SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(volume+0.2); CCLOG ("volume + : %f", CocosDenshion::SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume()); } void HelloWorld::menuResumeBGMusic(CCObject* pSender) { CocosDenshion::SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); } void HelloWorld::menuPauseBGMusic(CCObject* pSender) { CocosDenshion::SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); } void HelloWorld::menuStopBGMusic(CCObject* pSender) { CocosDenshion::SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(false); } void HelloWorld::menuPlayBGMusic(CCObject* pSender) { CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("bg.mp3"); }
運行看看效果: 對象
音量設置還有問題,貌似沒有起到做用,待解!!blog