12--使用背景音樂

        Cocos2DX爲咱們提供了簡單易用的音樂引擎,對於簡單的使用只須要掌握libCocosDenshion庫中的SimpleAudioEngine使用便可。函數

        libCocosDenshion將音樂分爲兩個大類:背景音樂和音效oop

  • 背景音樂:一般背景音樂時間較長;
  • 音效:而音效一般在特定的動做執行時播放,時間較短,更換頻率高。

 

      下面就以背景音樂的實例爲例看看怎麼使用SimpleAudioEngineui

      新建工程DemoMusic,去掉沒必要要的並加載bg.mp3文件到工程的Resources目錄下:this

image

    仍是先看看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");
}

        運行看看效果:         對象

image

   音量設置還有問題,貌似沒有起到做用,待解!!blog

相關文章
相關標籤/搜索