【Cocos2d-x 3.x】 场景切换生命周期、背景音乐播放和场景切换原理与源码分析

本文详细介绍了Cocos2d-x 3.x中场景切换的生命周期,包括replaceScene、pushScene和popScene的切换顺序及其对资源的影响。同时,探讨了场景切换时如何管理和调整背景音乐,推荐在onEnterTransitionDidFinish()中启动音乐,并在特定场景的cleanup()中停止音乐。还深入分析了场景切换原理,特别是过渡场景的动画效果,通过源码解析阐述了导演类Director如何协调旧场景退出和新场景进入的过程。
摘要由CSDN通过智能技术生成

大部分游戏里有很多个场景,场景之间需要切换,有时候切换的时候会进行背景音乐的播放和停止,因此对这块内容进行了总结。


场景切换生命周期

场景切换用到的函数:

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的方式中可以不停止播放的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值