cocos2d-x学习记录6——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内部封装了较多过渡效果,需要时自己选取即可。

时间: 2024-08-27 01:48:34

cocos2d-x学习记录6——CCTransition场景过渡的相关文章

libgdx学习记录11——平铺地图TiledMap

地图对于游戏场景十分重要,很多游戏都需要对地图进行编辑,可使用TileMap进行编辑并生成对应的tmx格式地图文件. 编辑好后,可通过TmxMapLoader来读取地图文件.可通过一个正交相机OthographicCamera和正交地图渲染器OrthogonalTiledMapRenderer来进行显示. 实例如下: 1 package com.fxb.newtest; 2 3 import com.badlogic.gdx.ApplicationAdapter; 4 import com.ba

C++学习记录贴2

static_cast 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性. C++中的static_cast执行非多态的转换,用于代替C中通常的转换操作.因此,被做为显式类型转换使用.比如: int i; float f = 166.71; i = static_cast<int>(f); 此时结果,i的值为166. reinterpret_cast 是C++里的强制类型转换符. 主要是将数据从一种类型的转换为另一种类型.所谓"通常为操作

Spring Boot学习记录(二)--thymeleaf模板

Spring Boot学习记录(二)–thymeleaf模板 标签(空格分隔): spring-boot 自从来公司后都没用过jsp当界面渲染了,因为前后端分离不是很好,反而模板引擎用的比较多,thymeleaf最大的优势后缀为html,就是只需要浏览器就可以展现页面了,还有就是thymeleaf可以很好的和spring集成.下面开始学习. 1.引入依赖 maven中直接引入 <dependency> <groupId>org.springframework.boot</gr

cocos2d-x学习记录-Tiled使用注意点

用Tiled新建 好地图后放到cocos2d上使用, // 加载Tiled地图 CCTMXTiledMap *map = CCTMXTiledMap::create("birdMap.tmx"); this->addChild(map); 然后报如下错误 Assert failed: TMX: Only 1 tileset per layer is supported 原来是我把多个图块上的元素,都画到一个块层上,一个块层只能包含一个图块的元素, 新建不同块层安放其它图块元素,就

Vue学习笔记进阶篇——列表过渡及其他

本文为转载,原文:Vue学习笔记进阶篇--列表过渡及其他本文将介绍Vue中的列表过渡,动态过渡, 以及可复用过渡是实现. 列表过渡 目前为止,关于过渡我们已经讲到: 单个节点 同一时间渲染多个节点中的一个 那么怎么同时渲染整个列表,比如使用 v-for ?在这种场景中,使用 <transition-group>组件.在我们深入例子之前,先了解关于这个组件的几个特点: 不同于 <transition>, 它会以一个真实元素呈现:默认为一个<span>.你也可以通过 tag

JSON工具学习记录--FastJSON循环引用问题

JSON工具学习记录–FastJSON循环引用问题 标签(空格分隔): fastjson 最近基于他人项目做二次开发,遇到了循环引用的问题,简单来说A引用了B,B引用了C,C引用了A,那么转换json就会无休止的转换下去. 更复杂的情况,A中引用了B,B中引用了一个A的集合,比如广告引用了广告类型,广告类型里面又有该类型下的所属广告. 1.构造情景 这种又叫做双向引用,个人感觉这种设计本身就不是很合理,当然还要看具体使用场景了. 广告类: /** * @author Niu Li * @date

Activiti框架学习记录-01

Activiti框架学习记录-01 本篇主要是Activiti工作流框架的学习记录,以及对于该框架的基本使用和一些浅显的理解: 1.工作流框架基本概念 2.在eclipse中使用工作流框架 3.创建工作框架 4.使用框架提供API,操作框架实现业务逻辑 1.工作流框架基本概念(摘自百度百科) 工作流(Workflow),就是"业务过程的部分或整体在计算机应用环境下的自动化",它主要解决的是"使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现某个

Java设计模式学习记录-桥接模式

前言 这次介绍结构型设计模式中的第二种模式,桥接模式. 使用桥接模式的目的就是为了解耦,松散的耦合更利于扩展,但是会增加相应的代码量和设计难度. 桥接模式 桥接模式是为了将抽象化与实现化解耦,让二者可以独立地变化.方便对每一部分的扩展,以及单独的维护.抽象化的一方与实现化的一方之间建立一个桥梁,这样两者的依赖关系就可以通过这个桥梁来建立了. 举例 三个小动物要过河,分别是小猪,小鸡,小马,小猪要去河对面的空地晒太阳,小鸡要去河对面的小树林里找虫子吃,小马要去河对面的草地里吃草.那么它们三个都要经

Java设计模式学习记录-装饰模式

前言 装饰模式也是一种结构型模式,主要是目的是相对于类与类之间的继承关系来说,使用装饰模式可以降低耦合度.JDK中有不少地方都使用到了装饰模式,例如Java的各种I/O流,javax.swing包中一些图形界面构件功能的增强等地方都运用了装饰模式. 装饰模式 定义 装饰模式的定义是:在不改变原类文件以及不使用继承的情况下,动态的扩展一个对象的功能.装饰模式是通过创建一个包装对象来实现的,也就是用装饰来包裹真实的对象. 举例 还是老规矩,举例说明,在给亲朋好友过生日时会买生日蛋糕,然后生日蛋糕又有