cocos2dx之实现场景过度效果Transition
大家好,我是Lampard
今天与大家探讨一下场景之间切换时的特效类Transition类
如何让场景之间切换时更加炫酷?各种场景切换特效很想拥有?现在,它来啦!!!
下面是cocos2dx引擎3.x版本的场景切换特效:
//慢慢淡化到另一场景
TransitionCrossFade::create(时间,目标场景);
//本场景变暗消失后另一场景慢慢出现
TransitionFade::create(时间,目标场景);
//本场景右上角到左下角方块消失到另一场景
TransitionFadeBL::create(时间,目标场景);
//本场景从上到下横条消失到另一场景
TransitionFadeDown::create(时间,目标场景);
//本场景左下角到右上角方块消失到另一场景
TransitionFadeTR::create(时间,目标场景);
//本场景从下到上横条消失到另一场景
TransitionFadeUp::create(时间,目标场景);
//本场景翻转消失到另一场景(斜上方)
TransitionFlipAngular::create(时间,目标场景,样式 );
//本场景翻转消失到另一场景(X轴)
TransitionFlipX::create(时间,目标场景,样式);
//本场景翻转消失到另一场景(Y轴)
TransitionFlipY::create(时间,目标场景);
//本场景跳动消失后另一场景跳动出现
TransitionJumpZoom::create(时间,目标场景);
//另一场景由整体从下面出现
TransitionMoveInB::create(时间,目标场景);
//另一场景由整体从左面出现
TransitionMoveInL::create(时间,目标场景);
//另一场景由整体从上面出现
TransitionMoveInT::create(时间,目标场景);
//另一场景由整体从右面出现
TransitionMoveInR::create(时间,目标场景);
//翻页切换,bool为true是向前翻。
TransitionPageTurn::create(时间,目标场景,bool);
//本场景从左到右消失同时另一场景出现
TransitionProgressHorizontal::create(时间,目标场景);
//本场景从中间到四周消失同时另一场景出现
TransitionProgressInOut::create(时间,目标场景);
//本场景从四周到中间消失同时另一场景出现
TransitionProgressOutIn::create(时间,目标场景);
//本场景逆时针消失到另一场景
TransitionProgre***adialCCW::create(时间,目标场景);
//本场景顺时针消失到另一场景
TransitionProgre***adialCW::create(时间,目标场景);
//本场景从上到下消失同时另一场景出现
TransitionProgressVertical::create(时间,目标场景);
//本场景旋转消失后另一场景旋转出现
TransitionRotoZoom::create(时间,目标场景);
//本场景缩小切换到另一场景放大
TransitionShrinkGrow::create(时间,目标场景);
//本场景向上滑动到另一场景
TransitionSlideInB::create(时间,目标场景);
//本场景向右滑动到另一场景
TransitionSlideInL::create(时间,目标场景);
//本场景向左滑动到另一场景
TransitionSlideInR::create(时间,目标场景);
//本场景向下滑动到另一场景
TransitionSlideInT::create(时间,目标场景);
//本场景三矩形上下消失后另一场景三矩形上下出现
TransitionSplitCols::create(时间,目标场景);
//本场景三矩形左右消失后另一场景三矩形左右出现
TransitionSplitRows::create(时间,目标场景);
//本场景小方块消失到另一场景
TransitionTurnOffTiles::create(时间,目标场景);
//本场景翻转消失到另一场景(斜上方)
TransitionZoomFlipAngular::create(时间,目标场景,样式);
//本场景翻转消失到另一场景(X轴)
TransitionZoomFlipX::create(时间,目标场景,样式);
//本场景翻转消失到另一场景(Y轴)
TransitionZoomFlipY::create(时间,目标场景,样式);
特效有很多,但是使用起来却一点也不复杂:
我们只需要创建一个场景,创建一个特效的对象,并把场景以及播放特效的时间传给特效对象即可。
聊到场景切换特效,那么就不得不讨论一下在场景切换之间内存处理的顺序是怎么样的
假设从A场景切换到B场景,调用各场景方法的顺序为:
如果没有切换效果(transition),则先调用B的init(),接着调用A的onExit(),然后调用B的onEnter()
如果有切换效果(transition),则为先调用B的init(),接着调用B的onEnter(),然后调用A的onExit()
也就是说,在调用了场景切换的特效时,A的生存周期会长一些,而这很可能会造成卡顿
最终解决方法:把init的一些加载放在inEnter()中使得更快的执行完init,把之前的场景释放
把一些资源的初始化放到onEnter中进行,那么究竟应该把那些资源放到onEnter中初始化,而那些资源又只能放到init中呢?
(1)像背景图这种只能放到init中,像场景切换时要看到的一些精灵,必须放到init中,不然场景切换时会看不到精灵。
(2)象精灵的一些动画,动作,可以放到onEnter中来初始化。
至此我们的场景切换特效已经完成,谢谢大家!!!