閱讀552 返回首頁    go 微軟 go windows


Cocos2d-x中播放背景音樂

背景音樂的播放與停止實例代碼如下
SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/Jazz.mp3", true);
SimpleAudioEngine::getInstance()->stopBackgroundMusic("sound/Jazz.mp3");


背景音樂的播放代碼放置到什麼地方比較適合呢例如在Setting場景中主要代碼如下
bool Setting::init()
{
	//播放代碼 																①
    return true;
}


void Setting::onEnter()
{
	Layer::onEnter();
	log("Setting onEnter");
	//播放代碼 																②
}


void Setting::onEnterTransitionDidFinish()
{
	Layer::onEnterTransitionDidFinish();
	log("Setting onEnterTransitionDidFinish");	
	//播放代碼 																③
}


void Setting::onExit()
{
	Layer::onExit();
	log("Setting onExit");											
}


void Setting::onExitTransitionDidStart()
{
	Layer::onExitTransitionDidStart();
	log("Setting onExitTransitionDidStart");								
}


void Setting::cleanup()
{
	Layer::cleanup();														
	log("Setting cleanup");
}



關於播放背景音樂理論上我們是可以將播放代碼SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/Synth.mp3",true)放置到三個位置代碼中的①、②、③。下麵我們分別分析一下它們還有什麼不同。
1、代碼放到第①行
代碼放到第①行即在Setting::init函數如果前麵場景中沒有調用背景音樂停止語句則可以正常播放背景音樂。但是如果前麵場景層HelloWorld::onExit函數有調用背景音樂停止語句那麼會出現背景音樂播放幾秒鍾後停止。

為了解釋這個現象我們可以參考一下6.3.2一節多場景切換生命周期。使用pushScene函數從實現HelloWorld場景進入Setting場景生命周期函數調用順序如下圖所示。


 
從圖中可見HelloWorld::onExit調用是在Setting::init之後這樣當我們在Setting::init中開始播放背景音樂後過一會調用HelloWorld::onExit停止背景音樂播放這樣問題就出現了。
注意 無論播放和停止的是否是同一個文件都會出現個問題。


2、代碼放到第②行
代碼放到第②行即在Setting::onExit函數如果前麵場景中沒有調用背景音樂停止語句則可以正常播放背景音樂。如果前麵的場景層HelloWorld::onExit函數有背景音樂停止語句也會出現背景音樂播放幾秒鍾後停止。原因與代碼放到第①行情況一樣。


3、代碼放到第③行
我們推薦代碼放到第③行代碼位置因為onEnterTransitionDidFinish函數是在進入層而且過渡動畫結束時候調用代碼放到這裏不用考慮中前麵場景是否有調用背景音樂停止語句。而且用戶也不會先聽到聲音後出現界麵現象。

綜上所述是否能夠成功播放背景音樂前麵場景是否有調用背景音樂停止語句有關也與當前場景中播放代碼在哪個函數裏有關。如果前麵場景沒有調用背景音樂停止語句問題也就簡單了我們可以將播放代碼放置在代碼①、②、③任何一處。但是如果前麵場景調用背景音樂停止語句在onEnterTransitionDidFinish函數播放背景音樂會更好一些。


更多內容請關注最新Cocos圖書《Cocos2d-x實戰 C++卷》
本書交流討論網站https://www.cocoagame.net
更多精彩視頻課程請關注智捷課堂Cocos課程https://v.51work6.com
歡迎加入Cocos2d-x技術討論群257760386


《Cocos2d-x實戰 C++卷》現已上線各大商店均已開售

京東https://item.jd.com/11584534.html

亞馬遜https://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

當當https://product.dangdang.com/23606265.html

互動出版網https://product.china-pub.com/3770734

《Cocos2d-x實戰 C++卷》源碼及樣章下載地址

源碼下載地址https://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1 

樣章下載地址https://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

歡迎關注智捷iOS課堂微信公共平台

最後更新:2017-04-03 05:39:40

  上一篇:go 使用ROI的方法剪切圖像
  下一篇:go Mat 轉為 IplImage