版本是 cocos2dx 3.3
场景切换的时刻是:(代码有删减)
void Director::drawScene() { // calculate "global" dt calculateDeltaTime(); if (_nextScene) { setNextScene(); } }
每一帧都会检查,看是不是有 _nextScene, 也就是 是不是需要进行场景切换了。
一般场景切换的过程:
当添加一个场景时,正在运行的场景会调用
_runningScene->onExitTransitionDidStart();
_runningScene->onExit();
然后新添加的场景会调用
onEnter();
onEnterTransitionDidFinish();
如果新添加的一个场景是 过渡场景(该对象里面包含真正的即将切换的场景对象),切换过程是这样:
1 过渡场景替代旧场景,变为正在运行的场景
2(过渡场景里面有保存了两个成员,一个是旧场景,一个真正的新场景)
通知旧场景 onExitTransitionDidStart()
通知真正即将添加的场景 onEnter()
3 当 过渡动作完成后,真正的新场景跟过渡场景切换。
通知旧场景 onExit()
通知新场景 onEnterTransitionDidFinish()
4 设置 真正的新场景为正在运行的场景,_nextScene 设置为 null
//这两个函数调用时刻是场景被移除时 onExitTransitionDidStart(); onExit(); //这个两个函数调用时刻是场景添加时 onEnter(); onEnterTransitionDidFinish(); 通过以上分析,我们得出,当有过渡场景场景切换时,每一组函数的调用是有时间间隔的。没有过渡场景则是瞬时完成调用
时间: 2024-11-18 14:29:27