cocos2d-x学习记录5——CCTransition场景过渡

利用CCTransition能够创建出一系列的场景过渡动画,能够使场景切换时更加绚丽丰富。

CCTransition派生出很多过渡动画,传入的参数一般包括过渡时间和创建的场景。

 

MyScene.h内容

 1 #ifndef MyScene_H_H
 2 #define MyScene_H_H
 3 
 4 #include "cocos2d.h"
 5 using namespace cocos2d;
 6 
 7 
 8 class TranScene
 9 {
10 public:
11     static CCTransitionScene* createScene(CCScene *scene);
12 
13     static int index;
14 };
15 
16 
17 class MyScene : public CCLayer
18 {
19 public:
20     static CCScene* createScene();
21     virtual bool init();
22     CREATE_FUNC( MyScene );
23 
24     virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
25     //virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
26     //virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
27     //virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);
28 
29     virtual void registerWithTouchDispatcher();
30 
31     //virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);
32     //virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);
33     //virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);
34     //virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);
35 
36 private:
37 };
38 
39 class NextScene : public CCLayer
40 {
41 public:
42     static CCScene* createScene();
43     virtual bool init();
44     CREATE_FUNC( NextScene );
45 
46     virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
47 
48     virtual void registerWithTouchDispatcher();
49 
50 private:
51 };
52 
53 #endif

 

MyScene.cpp内容

#include "MyScene.h"

int TranScene::index = 0;

CCTransitionScene* TranScene::createScene(CCScene *scene)
{
    CCTransitionScene *tranScene = NULL;
    switch(index){
    case 0: tranScene = CCTransitionFlipX::create(1, scene); break;
    case 1: tranScene = CCTransitionFlipY::create(1, scene); break;
    case 2: tranScene = CCTransitionFadeDown::create(1, scene); break;
    case 3: tranScene = CCTransitionFadeBL::create(1, scene); break;
    case 4: tranScene = CCTransitionCrossFade::create(1, scene); break;
    }
    index = (++index)%5;
    return tranScene;
}

CCScene* MyScene::createScene()
{
    CCScene *scene = CCScene::create();
    MyScene *layer = MyScene::create();
    scene->addChild(layer);
    return scene;
};


bool MyScene::init()
{
    if( !CCLayer::init() ){
        return false;
    }

    CCSize size = CCDirector::sharedDirector()->getWinSize();
    CCSprite *sprite = CCSprite::create("pal4.png");
    sprite->setAnchorPoint( ccp(0.5, 0.5) );
    //sprite->setPosition( ccp(size.width/2, size.height/2) );
    sprite->setPosition( ccp(size.width/2, size.height/2) );
    sprite->setScaleX( size.width/sprite->getContentSize().width );
    sprite->setScaleY( size.height/sprite->getContentSize().height );
    sprite->setTag(2345);
    addChild(sprite);

    setTouchEnabled(true);

    return true;
}

void MyScene::registerWithTouchDispatcher()
{
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
}

bool MyScene::ccTouchBegan(CCTouch* pTouch, CCEvent *pEvent)
{
    CCScene *scene = NextScene::createScene();
    //CCTransitionScene *tranScene = CCTransitionFlipX::create(1, scene);
    CCTransitionScene *tranScene = TranScene::createScene(scene);
    CCDirector::sharedDirector()->replaceScene(tranScene);
    return true;
}




CCScene* NextScene::createScene()
{
    CCScene *scene = CCScene::create();
    NextScene *layer = NextScene::create();
    scene->addChild(layer);
    return scene;
};


bool NextScene::init()
{
    if( !CCLayer::init() ){
        return false;
    }

    CCSize size = CCDirector::sharedDirector()->getWinSize();
    CCSprite *sprite = CCSprite::create("pal_4.png");
    sprite->setAnchorPoint( ccp(0.5, 0.5) );
    //sprite->setPosition( ccp(size.width/2, size.height/2) );
    sprite->setPosition( ccp(size.width/2, size.height/2) );
    //sprite->setScale(0.5f);
    sprite->setScaleX( size.width/sprite->getContentSize().width );
    sprite->setScaleY( size.height/sprite->getContentSize().height );
    sprite->setTag(2345);
    addChild(sprite);

    setTouchEnabled(true);

    return true;
}

void NextScene::registerWithTouchDispatcher()
{
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
}

bool NextScene::ccTouchBegan(CCTouch* pTouch, CCEvent *pEvent)
{
    CCScene *scene = MyScene::createScene();
    //CCTransitionScene *tranScene = CCTransitionFlipX::create(1, scene);
    CCTransitionScene *tranScene = TranScene::createScene(scene);
    CCDirector::sharedDirector()->replaceScene(tranScene);
    return true;
}

实例中,自己简单创建了两个场景,仅仅是所显示的sprite不同而已,并在切换时添加具体的切换效果即可。

运行效果:

  

cocos2d-x内部封装了较多过渡效果,需要时自己选取即可。

posted @ 2014-09-15 20:01  丛林小阁楼  阅读(326)  评论(0编辑  收藏  举报