[Cocos2d-x For WP8]Transition 场景切换
在游戏中通常会打完了一关之后就会从当前的场景转换到另外一关的场景了,在Cocos2d-x中是由CCScene类表示一个场景。那么场景(CCScene)是为游戏中的精灵(CCSprite)提供了舞台,场景由导演(CCDirector)控制,游戏中的所有场景存放在一个栈中,有且只有一个场景可以处于激活状态。直接replaceScene(即不适用动画效果)可以轻松的完成场景的切换,释放掉就场景,加载新场景,几乎不需要时间的过渡,瞬间完成。那么如果我们要在场景转换的过程中用一点动画的效果,就需要用到CCTransition这些场景切换的动画类了,在Cocos2d-x这些场景切换动画类有下面这些:
CCTransitionFade, //渐隐效果 CCTransitionFadeTR, //碎片效果 CCTransitionJumpZoom, //跳动效果 CCTransitionMoveInL, //从左向右移动 CCTransitionPageTurn, //翻页效果 CCTransitionRadialCCW, //钟摆效果 CCTransitionRotoZoom,//涡轮效果 CCTransitionSceneOriented,// CCTransitionShrinkGrow, //渐远效果 CCTransitionSlideInL, //左移 CCTransitionSplitCols,//上下移动 CCTransitionTurnOffTiles// CCTransitionScene : CCScene 基类 CCRotoZoomTransition 旋转缩小切换 CCJumpZoomTransition 缩小后跳跃切换 CCSlideInLTransition 从左向右切换 CCSlideInRTransition 从右向左切换 CCSlideInTTransition 从上向下切换 CCSlideInBTransition 从下向上切换 CCShrinkGrowTransition 逐渐缩小切换 CCFlipXTransition 已x中间为轴平面式旋转切换 CCFlipYTransition 已y中间为轴平面式旋转切换 CCFlipAngularTransition 侧翻式旋转切换 CCZoomFlipXTransition 缩小后x为轴旋转切换 CCZoomFlipYTransition 缩小后y为轴旋转切换 CCZoomFlipAngularTransition 缩小侧翻式旋转切换 CCFadeTransition 逐渐变暗切换 CCCrossFadeTransition 逐渐变暗切换2 CCTurnOffTilesTransition 随机方块覆盖切换 CCSplitColsTransition 三条上下分开切换 CCSplitRowsTransition 三条左右分开切换 CCFadeTRTransition 小方块大方块式切换 左下到右上 眩! CCFadeBLTransition 小方块大方块式切换 右上到左下 眩! CCFadeUpTransition 百叶窗从下向上 CCFadeDownTransition 百叶窗从上向下 CCTransitionRotoZoom : CCTransitionScene 旋转进入 CCTransitionJumpZoom : CCTransitionScene 跳动进入 CCTransitionMoveInL : CCTransitionScene<CCTransitionEaseScene> 从左侧进入 CCTransitionMoveInR : CCTransitionMoveInL 从右侧进入 CCTransitionMoveInT : CCTransitionMoveInL 从顶部进入 CCTransitionMoveInB : CCTransitionMoveInL 从底部进入 CCTransitionSlideInL : CCTransitionScene<CCTransitionEaseScene> 从左侧滑入 CCTransitionSlideInR : CCTransitionSlideInL 从右侧滑入 CCTransitionSlideInB : CCTransitionSlideInL 从顶部滑入 CCTransitionSlideInT : CCTransitionSlideInL 从底部滑入 CCTransitionShrinkGrow : CCTransitionScene<CCTransitionEaseScene> 交替进入 CCTransitionFlipX : CCTransitionSceneOriented x轴翻入(左右) CCTransitionFlipY : CCTransitionSceneOriented y轴翻入(上下) CCTransitionFlipAngular : CCTransitionSceneOriented 左上右下轴翻入 CCTransitionZoomFlipX : CCTransitionSceneOriented x轴翻入放大缩小效果(左右) CCTransitionZoomFlipY : CCTransitionSceneOriented y轴翻入放大缩小效果(上下) CCTransitionZoomFlipAngular :CCTransitionSceneOriented 左上右下轴翻入放大缩小效果 CCTransitionFade : CCTransitionScene 变暗变亮进入 CCTransitionCrossFade : CCTransitionScene 渐变进入 CCTransitionTurnOffTiles : CCTransitionScene<CCTransitionEaseScene> 小方格消失进入 CCTransitionSplitCols : CCTransitionScene<CCTransitionEaseScene> 竖条切换进入 CCTransitionSplitRows : CCTransitionSplitCols 横条切换进入 CCTransitionFadeTR : CCTransitionScene<CCTransitionEaseScene> 小方格右上角显示进入 CCTransitionFadeBL : CCTransitionFadeTR 小方格左下角显示进入 CCTransitionFadeUp : CCTransitionFadeTR 横条向上显示进入 CCTransitionFadeDown : CCTransitionFadeTR 横条向下显示进入
下面我们在Hello World的项目中使用一下场景转换的动画,当用户点击界面的时候就会切换到两外一个场景
//在init方法里面初始化当前的实例 bool HelloWorld::init() { bool bRet = false; do { //CCLayer进行初始化,初始化失败跳出循环 if ( !CCLayer::init() ) { break; } //获取手机屏幕的大小 CCSize size = CCDirector::sharedDirector()->getWinSize(); //创建文字Label CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Times New Roman", 24); //设置文字Label的位置 pLabel->setPosition( ccp(size.width * 0.5, size.height * 0.5) ); //设置文字Label的颜色 pLabel->setColor(ccc3(160, 80, 5)); //添加到当前的界面上 this->addChild(pLabel, 1); //接收界面的的触摸事件 setTouchEnabled(true); bRet = true; } while (0); //返回成功 return bRet; } // 屏幕点击事件 void HelloWorld::ccTouchesEnded(CCSet* touches, CCEvent* event) { CCScene* s = new CCScene(); CCLayer* pLayer = new TestLayer2(); s->addChild(pLayer); CCScene* pScene = CCTransitionJumpZoom::create(4.2f, s); pLayer->release(); s->release(); if (pScene) { CCDirector::sharedDirector()->replaceScene(pScene); } } TestLayer2::TestLayer2() { CCSize size = CCDirector::sharedDirector()->getWinSize(); CCSprite *b = CCSprite::create("cat.png"); b->setPosition(ccp(0, 0)); b->setPosition(ccp(size.width * 0.5, size.height * 0.5)); this->addChild(b); } TestLayer2::~TestLayer2() { }
运行的效果: