【唠叨】
游戏中两个场景的切换时经常要被用到的,cocos2dx引擎为我们提供了许多场景切换的动画,我感觉有些和PPT的切换很类似,所以感觉很熟悉。如:淡入淡出、翻页、跳入跳出等等。
本节要讲的场景切换CCTransitionScene方式十分丰富,不过内容比较简单,很容易掌握。
【致谢】
http://gl.paea.cn/contents/d4d676f371519df4.html
【3.x】
(1)去掉 “CC”
(2)卡牌翻转 TransitionFlip 中的样式 tOrientation
// //1: kCCTransitionOrientationLeftOver (左向右翻转) //2: kCCTransitionOrientationRightOver (右向左翻转) //3: kCCTransitionOrientationUpOver (下向上翻转) //4: kCCTransitionOrientationDownOver (上向下翻转) //
改为强枚举 TransitionScene::Orientation::
// LEFT_OVER //左向右翻转 RIGHT_OVER //右向左翻转 UP_OVER //下向上翻转 DOWN_OVER //上向下翻转 //
(3)其他变化不大。
【场景管理】
在讲场景切换CCTransitionScene之前,先来复习一下场景CCScene的管理。
游戏运行的过程中,每次只能运行一个场景,所以要切换到其他场景的话,需要对场景进行相应的管理。而对场景的管理则是由导演类CCDirector来进行操作的。
1、使用方法
// //获取一个单例对象 CCDirector::sharedDirector()->replaceScene(newScene); //
2、场景管理操作
// void runWithScene(CCScene *pScene); //进入AppDelegate主循环运行的场景,仅在运行第一个场景时调用 void pushScene(CCScene *pScene); //暂停当前场景,push到场景堆栈,运行新场景 void popScene(); //从场景堆栈中pop场景,删除当前场景(不入栈) void popToRootScene(); //从场景堆栈中pop出所有场景,栈底场景替换当前场景,删除当前场景(不入栈) void replaceScene(CCScene *pScene); //场景替换,删除当前场景(不入栈) void pause(); //暂停当前场景 void resume(); //恢复被暂停的当前场景 void end(); //终止执行,释放运行中的场景 //
【CCTransitionScene】
CCTransitionScene继承于CCScene,主要用于处理场景之间切换动画的管理。而我们主要关注的是它派生出来个各类场景切换动画效果的子类,及这些子类的使用方法。
由场景管理可知,场景切换有关的函数操作有两个:pushScene、replaceScene。
故可以在使用这两个函数进行场景切换时,加入场景切换动画效果,增加游戏的美感。
1、常用的场景切换类
// //慢慢淡化到另一场景 CCTransitionCrossFade::create(时间,目标场景); //变暗消失后,另一场景慢慢出现 CCTransitionFade::create(时间,目标场景); //翻页,true为向前翻页 CCTransitionPageTurn::create(时间,目标场景,bool); //变小跳动消失后,另一场景跳动变大出现 CCTransitionJumpZoom::create(时间,目标场景); //旋转变小消失后,另一场景旋转变大出现 CCTransitionRotoZoom::create(时间,目标场景); //变小消失,同时另一场景变大出现 CCTransitionShrinkGrow::create(时间,目标场景); //剥落场景,呈现出另一个场景 CCTransitionFadeBL::create(时间,目标场景); //右上到左下方块消失 CCTransitionFadeDown::create(时间,目标场景); //上到下横条消失 CCTransitionFadeTR::create(时间,目标场景); //左下到右上方块消失 CCTransitionFadeUp::create(时间,目标场景); //从下到上横条消失 //卡牌翻转 //样式(可以不写): //1: kCCTransitionOrientationLeftOver (左向右翻转) //2: kCCTransitionOrientationRightOver (右向左翻转) //3: kCCTransitionOrientationUpOver (下向上翻转) //4: kCCTransitionOrientationDownOver (上向下翻转) CCTransitionFlipAngular::create(时间,目标场景,样式12); //翻转 CCTransitionFlipX::create(时间,目标场景,样式12); //X轴翻转 CCTransitionFlipY::create(时间,目标场景,样式34); //Y轴翻转 CCTransitionZoomFlipAngular::create(时间,目标场景,样式12); //翻转 ,区别是附带回拉效果 CCTransitionZoomFlipX::create(时间,目标场景,样式12); //X轴翻转,区别是附带回拉效果 CCTransitionZoomFlipY::create(时间,目标场景,样式34); //Y轴翻转,区别是附带回拉效果 //卡牌(另一场景)叠放,插放在场景上面 CCTransitionMoveInB::create(时间,目标场景); //整体从下面插入 CCTransitionMoveInL::create(时间,目标场景); //整体从左面插入 CCTransitionMoveInT::create(时间,目标场景); //整体从上面插入 CCTransitionMoveInR::create(时间,目标场景); //整体从右面插入 //刷墙,矩形。(另一个场景像刷墙一样刷出来) CCTransitionProgressHorizontal::create(时间,目标场景); //从左到右 CCTransitionProgressVertical::create(时间,目标场景); //从上到下 CCTransitionProgressInOut::create(时间,目标场景); //从中间到四周 CCTransitionProgressOutIn::create(时间,目标场景); //从四周到中间 //刷墙,扇形。(另一个场景像刷墙一样刷出来) CCTransitionProgressRadialCCW::create(时间,目标场景); //逆时针 CCTransitionProgressRadialCW::create(时间,目标场景); //顺时针 //刷墙,分成很多小块。(一小块一小块的随机刷上去) CCTransitionTurnOffTiles::create(时间,目标场景); //滑动,滑出窗口。另一场景滑入窗口 CCTransitionSlideInB::create(时间,目标场景); //向上滑动 CCTransitionSlideInL::create(时间,目标场景); //向右滑动 CCTransitionSlideInR::create(时间,目标场景); //向左滑动 CCTransitionSlideInT::create(时间,目标场景); //向下滑动 //场景分裂成三块矩形,抽走消失。另一场景也成三块插入出现 CCTransitionSplitCols::create(时间,目标场景); //中间块向上,左右块向下抽出 CCTransitionSplitRows::create(时间,目标场景); //中间块向右,上下块向左抽出 //
2、使用方法
// //创建场景HelloWorld场景 CCScene* scene = HelloWorld::scene(); //创建场景切换方式 CCTransitionScene* ts = CCTransitionJumpZoom::create(2, scene); //切换场景 CCDirector::sharedDirector()->replaceScene(ts); //
【代码实战】
请参考官方给出的TestCpp项目中相关知识来学习,里面讲的很详细。