背景

在学习马里奥时,我们学习到从菜单场景到游戏场景的切换,代码如下

void CMMenuScene::OnStartCallBack( CCObject *pSender )
{
CCDirector* pDirector = CCDirector::sharedDirector();
CCScene *pScene = CMGameScene::CreateGameScene();
pDirector->replaceScene(pScene);
}

上面的代码调用了CCDirector::replaceScene函数去进行场景切换。

CCDirector和CCScene

在cocos2dx里,CCDirector和CCScene有很密切的关系,CCDirector是导演,负责CCScene的展示,切换,结束等工作,具体体现在成员函数中:

/** Enters the Director's main loop with the given Scene.
* Call it to run only your FIRST scene.
* Don't call it if there is already a running scene.
*
* It will call pushScene: and then it will call startAnimation
*/
void runWithScene(CCScene *pScene); /** Suspends the execution of the running scene, pushing it on the stack of suspended scenes.
* The new scene will be executed.
* Try to avoid big stacks of pushed scenes to reduce memory allocation.
* ONLY call it if there is a running scene.
*/
void pushScene(CCScene *pScene); /** Pops out a scene from the queue.
* This scene will replace the running one.
* The running scene will be deleted. If there are no more scenes in the stack the execution is terminated.
* ONLY call it if there is a running scene.
*/
void popScene(void); /** Pops out all scenes from the queue until the root scene in the queue.
* This scene will replace the running one.
* Internally it will call `popToSceneStackLevel(1)`
*/
void popToRootScene(void); /** Pops out all scenes from the queue until it reaches `level`.
If level is 0, it will end the director.
If level is 1, it will pop all scenes until it reaches to root scene.
If level is <= than the current stack level, it won't do anything.
*/
void popToSceneStackLevel(int level); /** Replaces the running scene with a new one. The running scene is terminated.
* ONLY call it if there is a running scene.
*/
void replaceScene(CCScene *pScene);

以上是CCDirector的关于CCScene的成员函数

void runWithScene(CCScene *pScene):该函数是刚开始运行时,导演类展示场景

void pushScene(CCScene* scene):该函数将新的scene压入栈。在程序中有一个栈,可以保存很多场景,这样方便后退之类的操作。

void popScene(void):弹出,与pushScene对应

void popToRootScene(void):弹出栈中除了第一个场景外的其他场景

void popToSceneStackLevel(int level):弹出到制定位置的scene

void replaceScene(CCScene *pScene):让新的scene代替栈中当前的场景

动画切换

有的时候,简单的场景切换显得单调,如果需要动画切换,则需要以下类之一:

HelloWorld2* scene = HelloWorld2::create();
//CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(1.2, (CCScene*)scene));
//CCDirector::sharedDirector()->replaceScene(CCTransitionFadeBL::create(1.2, (CCScene*)scene));
//CCDirector::sharedDirector()->replaceScene(CCTransitionFadeTR::create(1.2, (CCScene*)scene));
//CCDirector::sharedDirector()->replaceScene(CCTransitionTurnOffTiles::create(1.2, (CCScene*)scene));
//CCDirector::sharedDirector()->replaceScene(CCTransitionTurnOffTiles::create(1.2, (CCScene*)scene));
//CCDirector::sharedDirector()->replaceScene(CCTransitionJumpZoom::create(1.2, (CCScene*)scene));
//CCDirector::sharedDirector()->replaceScene(CCTransitionMoveInL::create(1.2, (CCScene*)scene));
//CCDirector::sharedDirector()->replaceScene(CCTransitionPageTurn::create(1.2, (CCScene*)scene, false));
//CCDirector::sharedDirector()->replaceScene(CCTransitionRotoZoom::create(1.2, (CCScene*)scene));
//CCDirector::sharedDirector()->replaceScene(CCTransitionShrinkGrow::create(1.2, (CCScene*)scene));
//CCDirector::sharedDirector()->replaceScene(CCTransitionSlideInL::create(1.2, (CCScene*)scene));
CCDirector::sharedDirector()->replaceScene(CCTransitionCrossFade::create(1.2, (CCScene*)scene));

使用切换场景来进行场景切换,切换场景类如下所列:

CCTransitionRotoZoom//从大到小画面缩小并跳动进入
CCTransitionJumpZoom//立体从左边缩小跳动进入
CCTransitionMoveInL//从左边移动进入右边
CCTransitionMoveInR//从右边移动进入左边
CCTransitionMoveInT//从上边移动到入下边
CCTransitionMoveInB//从下边移动到入上边
CCTransitionSlideInL//从左边移动入右边
CCTransitionSlideInR//从右边移动入左边
CCTransitionSlideInT//从上边移动入下边
CCTransitionSlideInB//从下边移动入上边
CCTransitionShrinkGrow//从大到小在中间缩小进入
CCTransitionFlipX//从X轴方向立体翻转
CCTransitionFlipY//从Y轴方向立体翻转
CCTransitionFlipAngular//从右边头翻转进入
CCTransitionZoomFlipX//从X轴方向立体跳动翻转
CCTransitionZoomFlipY//从Y轴方向立体跳动翻转
CCTransitionZoomFlipAngular//从右边立体缩小翻转进入
CCTransitionFade//从中间渐变进入
CCTransitionCrossFade//从外围渐变进入
CCTransitionTurnOffTiles//从格子覆盖上层进入
CCTransitionSplitCols//竖直分三个方块切入
CCTransitionSplitRows//横向分三个方块切入
CCTransitionFadeTR//从左下角向右上角格子渐变进入
CCTransitionFadeBL//从右上角角向左下角格子渐变进入
CCTransitionFadeUp//从下向上渐变进入
CCTransitionFadeDown//从上向下渐变进入

cocos2dx进阶学习之场景切换的更多相关文章

  1. [Cocos2d-x For WP8]Transition 场景切换

    在游戏中通常会打完了一关之后就会从当前的场景转换到另外一关的场景了,在Cocos2d-x中是由CCScene类表示一个场景.那么场景(CCScene)是为游戏中的精灵(CCSprite)提供了舞台,场 ...

  2. cocos2dx进阶学习之CCNode

    继承关系 CCNode  -> CCObject CCNode在cocos2dx中抽象舞台对象,需要渲染的对象都是从CCNode派生,包括CCScene,CCLayer,CCSprite等等 C ...

  3. cocos2dx进阶学习之CCDirector

    继承关系 CCDirecotor -> CCObject, TypeInfo 处理主窗口消息,管理何时.何种方式执行场景. 经常被翻译成导演,负责管理整个游戏的进程推动和周边支持. 成员 inl ...

  4. Cocos2d-x Lua中多场景切换生命周期

    在多个场景切换时候,场景的生命周期会更加复杂.这一节我们介绍一下场景切换生命周期.多个场景切换时候分为几种情况:情况1,使用pushScene函数从实现GameScene场景进入SettingScen ...

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

    大部分游戏里有很多个场景,场景之间需要切换,有时候切换的时候会进行背景音乐的播放和停止,因此对这块内容进行了总结. 场景切换生命周期 场景切换用到的函数: bool Setting::init() { ...

  6. cocos2dx基础篇(24) 场景切换效果CCTransitionScene

    [3.x]     (1)去掉 "CC"     (2)卡牌翻转 TransitionFlip 中的样式 tOrientation // //1: kCCTransitionOri ...

  7. cocos2d-x入门学习篇;切换场景

    手机游戏开发最近很火爆,鉴于一直在学习c++,看起来上手就比较快了.这篇文章来自皂荚花 cocos2d-x技术,我把我的想法分享给大家. 首先来看一段代码: CCScene* HelloWorld:: ...

  8. cocos2dx进阶学习之CCScene

    继承关系 CCScene -> CCNode -> CCObject CCScene抽象了一个场景的概念,类似舞台的一幕 函数 static CCScene *create(void); ...

  9. cocos2d-x中常见的场景切换

    本文转载自:http://www.cnblogs.com/linux-ios/archive/2013/04/09/3010779.html bool HelloWorld::init() { /// ...

随机推荐

  1. iOS中Block介绍(二)内存管理与其他特性

    我们在前一章介绍了block的用法,而正确使用block必须要求正确理解block的内存管理问题.这一章,我们只陈述结果而不追寻原因,我们将在下一章深入其原因. 一.block放在哪里 我们针对不同情 ...

  2. 2.Freshman阶段学习内容的确定

    我刷知乎.在知乎上答题的程序员,不是很牛逼就是更牛逼,说起各种系统.各种系统的各种版本.各种语言.数据库.算法.IT届的各种圣战都有板有眼.信手拈来.头头是道,不得不服.这导致了一些非常严重的问题:我 ...

  3. ios开发学习笔记(1)

    objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = ...

  4. mysql安装详细步骤图解

    本文转自http://blog.csdn.net/fanyunlei/article/details/21454645 别看图多,其实mysql的安装十分简单,一路next即可,只是注意倒数第三步,设 ...

  5. JavaSE_ 网络编程 目录(26)

    JavaSE学习总结第26天_网络编程26.01 网络编程概述26.02 网络模型概述和图解26.03 网络编程三要素概述26.04 网络编程三要素之IP概述126.05 InetAddress类的概 ...

  6. centos 挂载windows共享目录

    su (获取root权限) yum install samba 安装samba (其实我们只用到samba里面的winbind以便我们能够用windows机器的名称找到该机器的网络地址,在下面叙述的过 ...

  7. 定时每天备份mysql

    http://blog.csdn.net/panning_hu/article/details/9210001 Spring MVC Spring中MVC框架的底层实现 http://blog.csd ...

  8. c++中的成员选择符

    c++中支持仅能指向类成员的指针,对这种类型的指针进行数据的提取操作时,可使用如下两种类型的操作符:成员对象选择操作符.* 和 成员指针选择操作符->* 例一: #include <ios ...

  9. golang实现tcp接入服务器

    接入服务器和后端业务服务其维持tcp连接,多个前端请求通过接入服务器访问后端业务服务器,接入服务器可以方便增加路由功能,维护多个业务服务器,根据消息ID路由到具体的业务服务器. 项目目录如下 simp ...

  10. mac下的搭建本地discuz论坛

    本地是php+mysql+apache的环境.也可以用xampp一键安装的东西,那个貌似比较省事.因为我的本地php环境已经装好了,就直接下了discuz的代码安装. 打开web共享 将discuz代 ...