关于场景:
使用CCDirector replaceScene 替换场景,每个节点会调用CCNode自带的三个方法:
OnEnter
OnEnterTransitionDidFinish
onExit
这三个方法在他们的super避免触摸输入问题和内存泄露:
- void CMyLayer::onEnter()
- {
- // 节点调用init方法以后会调用此方法
- // 如果使用CCTransitionScene,将会在过渡效果开始后调用
- CCLayer::onEnter();
- }
void CMyLayer::onEnter()
{
// 节点调用init方法以后会调用此方法
// 如果使用CCTransitionScene,将会在过渡效果开始后调用
CCLayer::onEnter();
}
- void CMyLayer::onEnterTransitionDidFinish()
- {
- //调用onEnter以后将会调用
- // 如果使用CCTransitionScene,将会在过渡效果结束以后调用此方法
- CCLayer::onEnterTransitionDidFinish();
- }
void CMyLayer::onEnterTransitionDidFinish()
{
//调用onEnter以后将会调用
// 如果使用CCTransitionScene,将会在过渡效果结束以后调用此方法
CCLayer::onEnterTransitionDidFinish();
}
- void CMyLayer::onExit()
- {
- // 节点调用dealloc方法之前将会调用此方法
- // 如果使用CCTransitionScene, 将会在过渡效果结束以后调用此方法
- CCLayer::onExit();
- }
void CMyLayer::onExit()
{
// 节点调用dealloc方法之前将会调用此方法
// 如果使用CCTransitionScene, 将会在过渡效果结束以后调用此方法
CCLayer::onExit();
}
调用顺序:
- NewScene scene
- NewScene init
- NewScene onEnter
- 过渡效果
- OldScene onExit
- NewScene onEnterTransitionDidFinish
- OldScene dealloc
注意:
1.onEnterTransitionDidFinish运行时OldScene仍存在内存中,如果想在 onEnterTransitionDidFinish方法中分配大内存
- 可以起一个selector,等下一帧再开始分配,确保之前的场景已从内存中删除.
- 另一个方法是在上一个场景的onExit中释放尽可能多内存.
2.场景生成在转换之前就开始了,如果在init或onEnter方法执行很多素材或分配很大内存的话,就会发生明显的停顿。
- loading场景的做法:在init中显示”loading”..启动一个scheduleupdate,在update中实现replace scene
本文详细介绍了使用Cocos2d-x进行场景切换时,各节点如何调用onEnter、onEnterTransitionDidFinish及onExit方法。文章强调了这些方法调用的顺序,并给出了在场景切换过程中避免内存泄露和触摸输入问题的建议。

277

被折叠的 条评论
为什么被折叠?



