大部分游戏里有很多个场景,场景之间需要切换,有时候切换的时候会进行背景音乐的播放和停止,因此对这块内容进行了总结。
场景切换生命周期
bool Setting::init()
{
if( !Layer::init() )
{
returnfalse;
}
log("Settinginit");
......
returntrue;
}
void Setting::onEnter()
{
Layer::onEnter();
log("SettingonEnter");
}
void Setting::onEnterTransitionDidFinish()
{
Layer::onEnterTransitionDidFinish();
log("SettingonEnterTransitionDidFinish");
}
void Setting::onExit()
{
Layer::onExit();
log("SettingonExit");
}
void Setting::onExitTransitionDidStart()
{
Layer::onExitTransitionDidStart();
log("SettingonExitTransitionDidStart");
}
void Setting::cleanup()
{
Layer::cleanup();
log("Settingcleanup");
}
常见的三种方式为:
1. replaceScene
这种情况下场景的切换顺序为:
2. pushScene
3. popScene
可以看出,replaceScene方式会释放掉需要替换掉的场景,而pushScene和popScene不会释放掉。
场景切换时进行背景音乐的调整
1 . 播放背景音乐
推荐在Setting::onEnterTransitionDidFinish()函数里进行开启背景音乐,因为onEnterTransitionDidFinish函数是进入层且在场景动画结束后调用,播放音乐的代码放在这里用考虑前面场景是否有调用背景音乐停止语句,也不会出现用户先听到背景音乐,后看到界面现象。
2. 停止播放背景音乐
如果从HelloWorld到Setting是pushScene方法进入Setting的,则推荐停止播放背景音乐在HelloWorld::cleanup()中调用停止播放背景音乐的函数,因为这种方式进行切换场景时不会调用HellWorld::cleanup();
如果是用replaceScene进行场景切换, 实际上可以不进行背景音乐停止的调用的,因为在Setting::onEnterTransitionFinish()进行背景音乐的播放的调用,如果在HellWorld::cleanup()进行停止播放音乐的调用,则在Setting中停止播放背景音乐,因此在replaceScene的方式中可以不停止播放的。