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

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

MyScene.h内容

 #ifndef MyScene_H_H
#define MyScene_H_H #include "cocos2d.h"
using namespace cocos2d; class TranScene
{
public:
static CCTransitionScene* createScene(CCScene *scene); static int index;
}; class MyScene : public CCLayer
{
public:
static CCScene* createScene();
virtual bool init();
CREATE_FUNC( MyScene ); virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
//virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
//virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
//virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent); virtual void registerWithTouchDispatcher(); //virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);
//virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);
//virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);
//virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent); private:
}; class NextScene : public CCLayer
{
public:
static CCScene* createScene();
virtual bool init();
CREATE_FUNC( NextScene ); virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); virtual void registerWithTouchDispatcher(); private:
}; #endif

MyScene.cpp内容

#include "MyScene.h"

int TranScene::index = ;

CCTransitionScene* TranScene::createScene(CCScene *scene)
{
CCTransitionScene *tranScene = NULL;
switch(index){
case : tranScene = CCTransitionFlipX::create(, scene); break;
case : tranScene = CCTransitionFlipY::create(, scene); break;
case : tranScene = CCTransitionFadeDown::create(, scene); break;
case : tranScene = CCTransitionFadeBL::create(, scene); break;
case : tranScene = CCTransitionCrossFade::create(, scene); break;
}
index = (++index)%;
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/, size.height/) );
sprite->setScaleX( size.width/sprite->getContentSize().width );
sprite->setScaleY( size.height/sprite->getContentSize().height );
sprite->setTag();
addChild(sprite); setTouchEnabled(true); return true;
} void MyScene::registerWithTouchDispatcher()
{
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, , 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/, size.height/) );
//sprite->setScale(0.5f);
sprite->setScaleX( size.width/sprite->getContentSize().width );
sprite->setScaleY( size.height/sprite->getContentSize().height );
sprite->setTag();
addChild(sprite); setTouchEnabled(true); return true;
} void NextScene::registerWithTouchDispatcher()
{
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, , 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内部封装了较多过渡效果,需要时自己选取即可。

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

  1. 我的Spring学习记录(四)

    虽然Spring管理这我们的Bean很方便,但是,我们需要使用xml配置大量的Bean信息,告诉Spring我们要干嘛,这还是挺烦的,毕竟当我们的Bean随之增多的话,xml的各种配置会让人很头疼. ...

  2. 我的three.js学习记录(二)

    通过上一篇文章我的three.js学习记录(一)基本上是入门了three.js,但是这不够3D,这次我希望能把之前做的demo弄出来,然后通过例子来分析操作步骤. 1. 示例 上图是之前做的一个dem ...

  3. 我的three.js学习记录(三)

    此次的亮点不是three.js的3d部分,而是通过调用摄像头然后通过摄像头的图像变化进行简单的判断后进行一些操作.上篇中我通过简单的示例分析来学习three.js,这次是通过上一篇的一些代码来与摄像头 ...

  4. ElasticSearch 学习记录之如任何设计可扩容的索引结构

    扩容设计 扩容的单元 一个分片即一个 Lucene 索引 ,一个 Elasticsearch 索引即一系列分片的集合 一个分片即为 扩容的单元 . 一个最小的索引拥有一个分片. 一个只有一个分片的索引 ...

  5. Android开发技术周报176学习记录

    Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...

  6. Java设计模式学习记录-模板方法模式

    前言 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 模板方法模式 概念介绍 模板方法模式,其实是很好理解的,具体 ...

  7. Java设计模式学习记录-状态模式

    前言 状态模式是一种行为模式,用于解决系统中复杂的对象状态转换以及各个状态下的封装等问题.状态模式是将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象的状态可以灵活多变.这样在客户端使 ...

  8. Java设计模式学习记录-观察者模式

    前言 观察者模式也是对象行为模式的一种,又叫做发表-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式. 咱们目前用的最多的就是各种MQ(Message Queue ...

  9. Java设计模式学习记录-备忘录模式

    前言 这次要介绍的是备忘录模式,也是行为模式的一种 .现在人们的智能手机上都会有备忘录这样一个功能,大家也都会用,就是为了记住某件事情,防止以后自己忘记了.那么备忘录模式又是什么样子的呢?是不是和手机 ...

随机推荐

  1. CSS揭秘(一)引言

    借了一本CSS揭秘,国外的一本书,应该是目前相关书目里最好的了,内容非常扎实,不得不说图灵教育出的书真的不错,不然不是很厚的一本书卖到99也是.... 国外的这类书总是以问题开始,然后通过解决问题引出 ...

  2. Oracle EBS AP 取消付款

    --取消付款 created by jenrry 20170425 declare l_return_status varchar2(50); l_msg_count number; l_msg_da ...

  3. NodeJS链接MySql数据库

    //1.用npm命令安装mysql模块 npm install mysql //2.js文件中引入mysql模块 const mysqlModule = require('mysql'); //3.创 ...

  4. Linux下查看端口,强制kill进程

    1.查看8088端口被哪个进程占用:netstat -apn | grep 8088 2.强制kill某一进程:kill -s 9 1827

  5. 【排序算法】选择排序(Selection sort)

    0. 说明 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最 ...

  6. Windows:服务已经标记为删除

    解决办法: 方法一:运行删除服务项命令的时候,服务管理窗口未关闭,关闭服务管理窗口即可: 方法二:删除服务的注册表项,路径为: HKEY_LOCAL_MACHINE\SYSTEM\CurrentCon ...

  7. MySQL基础之 索引

    MySQL索引讲解 索引的好处: MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么 ...

  8. git bash安装和基本设置

    Part1:安装步骤 1.下载地址: https://git-for-windows.github.io/ 2.下载完成后安装,安装路径自己选择,其他的选项参照下图: 其他的一步一步往下即可,最后Fi ...

  9. DevExpress05、TileControl、AlertControl

    TileControl控件 该控件是根据Windows 8的用户界面设计的,可以轻松地把各个控制块集成到窗体上. 1.   IndertBetweenGroups属性 控制两个Group之间的间距: ...

  10. sed 指定行范围匹配(转)

    sed -n '5,10{/pattern/p}' file sed是一个非交互性性文本编辑器,它编辑文件或标准输入 导出的文件拷贝.标准输入可能是来自键盘.文件重定向.字符串或变量,或者是一个管道文 ...