• 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内部封装了较多过渡效果,需要时自己选取即可。

  • 相关阅读:
    Windows出现BOOTBCD错误的解决办法
    解决真机调试时Eclipse DDMS上打不开/data目录的问题
    解决魅族MX5卸载debug-app不干净,导致安装、升级不成功的问题
    iOS10 相机相册等权限的使用、检测并引导用户开启权限
    python脚本后台执行
    CentOS 6.8 安装 Python3
    Virtualenv教程
    Linux路由表
    python websocket-client connection
    RESTful API 设计指南
  • 原文地址:https://www.cnblogs.com/MiniHouse/p/3973539.html
Copyright © 2020-2023  润新知