Cocos2d-x中播放背景音樂

背景音樂的播放與中止實例代碼以下:
php

[html] view plaincopyhtml

 

  1. SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/Jazz.mp3", true);  函數

  2. SimpleAudioEngine::getInstance()->stopBackgroundMusic("sound/Jazz.mp3");  動畫



背景音樂的播放代碼放置到什麼地方比較適合呢?例如:在Setting場景中,主要代碼以下:網站

[html] view plaincopyspa

 

  1. bool Setting::init()  .net

  2. {  orm

  3.     //播放代碼                                                              ①  htm

  4.     return true;  blog

  5. }  

  6.   

  7.   

  8. void Setting::onEnter()  

  9. {  

  10.     Layer::onEnter();  

  11.     log("Setting onEnter");  

  12.     //播放代碼                                                              ②  

  13. }  

  14.   

  15.   

  16. void Setting::onEnterTransitionDidFinish()  

  17. {  

  18.     Layer::onEnterTransitionDidFinish();  

  19.     log("Setting onEnterTransitionDidFinish");    

  20.     //播放代碼                                                              ③  

  21. }  

  22.   

  23.   

  24. void Setting::onExit()  

  25. {  

  26.     Layer::onExit();  

  27.     log("Setting onExit");                                            

  28. }  

  29.   

  30.   

  31. void Setting::onExitTransitionDidStart()  

  32. {  

  33.     Layer::onExitTransitionDidStart();  

  34.     log("Setting onExitTransitionDidStart");                                  

  35. }  

  36.   

  37.   

  38. void Setting::cleanup()  

  39. {  

  40.     Layer::cleanup();                                                         

  41.     log("Setting cleanup");  

  42. }  




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

爲了解釋這個現象,咱們能夠參考一下6.3.2一節多場景切換生命週期。使用pushScene函數從實現HelloWorld場景進入Setting場景,生命週期函數調用順序以下圖所示。

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


二、代碼放到第②行
代碼放到第②行(即在Setting::onExit函數),若是前面場景中沒有調用背景音樂中止語句,則能夠正常播放背景音樂。若是前面的場景層HelloWorld::onExit函數有背景音樂中止語句,也會出現背景音樂播放幾秒鐘後中止。緣由與代碼放到第①行狀況同樣。


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

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

 

 

更多內容請關注Cocos2d-x系列圖書《Cocos2d-x實戰(卷Ⅰ):C++開發》

本書交流討論網站:http://www.cocoagame.net

歡迎加入cocos2d-x技術討論羣:25776038六、327403678

相關文章
相關標籤/搜索