阅读552 返回首页    go 京东网上商城


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