cocos2dx进阶学习之场景切换
背景
在学习马里奥时,我们学习到从菜单场景到游戏场景的切换,代码如下
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进阶学习之场景切换的更多相关文章
- [Cocos2d-x For WP8]Transition 场景切换
在游戏中通常会打完了一关之后就会从当前的场景转换到另外一关的场景了,在Cocos2d-x中是由CCScene类表示一个场景.那么场景(CCScene)是为游戏中的精灵(CCSprite)提供了舞台,场 ...
- cocos2dx进阶学习之CCNode
继承关系 CCNode -> CCObject CCNode在cocos2dx中抽象舞台对象,需要渲染的对象都是从CCNode派生,包括CCScene,CCLayer,CCSprite等等 C ...
- cocos2dx进阶学习之CCDirector
继承关系 CCDirecotor -> CCObject, TypeInfo 处理主窗口消息,管理何时.何种方式执行场景. 经常被翻译成导演,负责管理整个游戏的进程推动和周边支持. 成员 inl ...
- Cocos2d-x Lua中多场景切换生命周期
在多个场景切换时候,场景的生命周期会更加复杂.这一节我们介绍一下场景切换生命周期.多个场景切换时候分为几种情况:情况1,使用pushScene函数从实现GameScene场景进入SettingScen ...
- 【Cocos2d-x 3.x】 场景切换生命周期、背景音乐播放和场景切换原理与源码分析
大部分游戏里有很多个场景,场景之间需要切换,有时候切换的时候会进行背景音乐的播放和停止,因此对这块内容进行了总结. 场景切换生命周期 场景切换用到的函数: bool Setting::init() { ...
- cocos2dx基础篇(24) 场景切换效果CCTransitionScene
[3.x] (1)去掉 "CC" (2)卡牌翻转 TransitionFlip 中的样式 tOrientation // //1: kCCTransitionOri ...
- cocos2d-x入门学习篇;切换场景
手机游戏开发最近很火爆,鉴于一直在学习c++,看起来上手就比较快了.这篇文章来自皂荚花 cocos2d-x技术,我把我的想法分享给大家. 首先来看一段代码: CCScene* HelloWorld:: ...
- cocos2dx进阶学习之CCScene
继承关系 CCScene -> CCNode -> CCObject CCScene抽象了一个场景的概念,类似舞台的一幕 函数 static CCScene *create(void); ...
- cocos2d-x中常见的场景切换
本文转载自:http://www.cnblogs.com/linux-ios/archive/2013/04/09/3010779.html bool HelloWorld::init() { /// ...
随机推荐
- 如何得到Sessionid的值
当用户向一个网站请求第一个页面时,用户会话启动.当第一个页面被请求时,web服务器将asp.net_sessionID cookie添加进用户的浏览器.可以使用newsession属性探测新会话的启 ...
- VS EF Error: Configuration Error extension=".edmx" type="System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider"
错误截图: Configuration Error :<add extension=".edmx" type="System.Data.Entity.Design. ...
- iOS网络开发-AFNetworking请求asp.net WebService
看到园子有位朋友需要使用AFN框架请求 WebService,所以就整理了一下,demo下载链接在底部 编写WebService可以看这篇博客 http://www.cnblogs.com/linmi ...
- MVC4入门指南
本系列共10篇文章,翻译自Asp.Net MVC4 官方教程,由于本系列文章言简意赅,篇幅适中,从一个示例开始讲解,全文最终完成了一个管理影片的小系统,非常适合新手入门Asp.Net MVC4,并由此 ...
- 小猪猪逆袭成博士之C++基础篇(一)数据精度、强制类型转换、变量命名规则
小猪猪逆袭成博士之C++基础篇(一) 关键词: 数据精度.强制类型转换.变量命名规则 综述: 1.大多数编程语言通过两种方式来进一步补充其特征:一是赋予程序员自定义数据类型的权利(C++中的类):二是 ...
- OA项目总结
一.自定义拦截器: 继承AbstractInterceptor,覆写intercept方法,实现功能逻辑,最后在Struts.xml文件中配置了自定义拦截器,首先自定义拦截器栈, <!- ...
- jquery的extend()函数
extend()是在写插件的过程中常用的方法,该方法有一些重载原型. 1.该方法的原型是: extend(dest,src1,src2,src3...); 它的含义是将src1,src2,src3.. ...
- SPSS19.0实战之聚类分析
这篇文章与上一篇的回归分析是一次实习作业整理出来的.所以参考文献一并放在该文最后.CNBlOG网页排版太困难了,又不喜欢live writer…… 聚类分析是将物理或者抽象对象的集合分成相似的对象类的 ...
- 电子标签(RFID)天线的印制技术
电子标签是射频识别(RFID)的俗称,RFID是射频识别技术的英文(RadioFrequencyIdentification)缩写,射频识别技术是一项利用射频信号通过空间耦合(交变磁场或电磁场)实现无 ...
- mfc删除标题和边框
//删除标题和边框WS_CAPTION和WS_BORDER风格 ModifyStyle(WS_CAPTION, 0);ModifyStyle(WS_BORDER, 0);