cocos2d-x中有两种方法可以切换场景,分别为replaceScene
和pushScene
(还有特殊情况,即在切换的两个场景中间加上过渡动画效果TransitionProgress
);
使用replaceScene会销毁之前的场景,而使用pushScene则不会;
不同的切换方式,前后两个场景的生命周期情况也会有所不同。下面看看通过不同方式切换时,前后两个场景的生命周期函数的调用情况。
生命周期函数
首先,创建两个场景类SceneA
和SceneB
,并对场景的生命周期事件进行监听。
在两个类的构造函数中加入如下代码:
local function onNodeEvent(event)
if event == "enter" then
self:onEnter()
elseif event == "enterTransitionFinish" then
self:onEnterTransitionFinish()
elseif event == "exit" then
self:onExit()
elseif event == "exitTransitionStart" then
self:onExitTransitionStart()
elseif event == "cleanup" then
self:cleanup()
end
end
self:registerScriptHandler(onNodeEvent)
replaceScene
通过replaceScene方法切换场景时,生命周期函数调用顺序如下图所示:
pushScene 和 popScene
通过pushScene 和 popScene方法切换场景时,生命周期函数调用顺序如下图所示:
有过渡效果的replaceScene
通过replaceScene方法切换场景,并加入过渡动画时,生命周期函数调用顺序如下图所示:
有过渡效果的pushScene
通过pushScene方法切换场景,并加入过渡动画时,生命周期函数调用顺序如下图所示: