本文隶属于专题系列: cocos2dx基础篇

【唠叨】

    游戏中两个场景的切换时经常要被用到的,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,主要用于处理场景之间切换动画的管理。而我们主要关注的是它派生出来个各类场景切换动画效果的子类,及这些子类的使用方法。

    由场景管理可知,场景切换有关的函数操作有两个:pushScenereplaceScene

    故可以在使用这两个函数进行场景切换时,加入场景切换动画效果,增加游戏的美感。i_f32.gif

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项目中相关知识来学习,里面讲的很详细。i_f13.gif

你可能感兴趣的内容
Git简单入门教程 收藏,4454 浏览
0条评论

dexcoder

这家伙太懒了 <( ̄ ﹌  ̄)>
Owner