今天, 让我们来看看现场CCScene创建原则和切换模式,

首先, 个什么样子:

我们先来看看效果:

啥也没有:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0MjQ5NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

诸位少侠莫急, 且待我一一解释( 旁白: 你今天又是在发什么疯啊)

创建一个继承于CCLayer的HelloWorld,然后通过HelloWorld这个Layer中提供一个产生CCScene的指针的静态函数,获取场景的指针,加载场景

我们先具体的看看每一个函数做了什么

CCScene* HelloWorld::scene()

创建了一个场景

依据HelloWorld创建了一个层

将层加入到场景里面

返回场景指针

bool HelloWorld::init()

推断父类是否初始化成功, 假设不成功, 结束初始化操作

总的来说, CCScene相当于一个容器, 尽管继承自CCNode, 可是什么也没干, 没有在它的基础上加入成员变量和方法, 仅仅是重构了init, 把层加入到场景中

所以我们要在init函数里面进行各种操作, 然后使用addChild加入到层上面, 我们再让CCDirector调用runWithScene(), 播放这个场景, 我们加入的精灵这些才干在屏幕上显示出来

好了, 我们来看看今天最重要一部分, 场景切换

先来看看场景切换有多少特效:

[1]:CCTransitionCrossFade::create(时间,目标场景);

//慢慢淡化到还有一场景

[2]:CCTransitionFade::create(时间,目标场景);

//本场景变暗消失后还有一场景慢慢出现

[3]:CCTransitionFadeBL::create(时间,目标场景);

//本场景右上角到左下角方块消失到还有一场景

[4]:CCTransitionFadeDown::create(时间,目标场景);

//本场景从上到下横条消失到还有一场景

[5]:CCTransitionFadeTR::create(时间,目标场景);

//本场景左下角到右上角方块消失到还有一场景

[6]:CCTransitionFadeUp::create(时间,目标场景);

//本场景从下到上横条消失到还有一场景

[7]:CCTransitionFlipAngular::create(时间,目标场景,样式 );

//本场景翻转消失到还有一场景(斜上方)

//样式(能够不写):

//kCCTransitionOrientationLeftOver(左向右翻转)

//kCCTransitionOrientationRightOver(右向左翻转)

[8]:CCTransitionFlipX::create(时间,目标场景,样式);

//本场景翻转消失到还有一场景(X轴)

//样式(能够不写):

//kCCTransitionOrientationLeftOver(左向右翻转)

//kCCTransitionOrientationRightOver(右向左翻转)

[9]:CCTransitionFlipY::create(时间,目标场景);

//本场景翻转消失到还有一场景(Y轴)

//样式(能够不写):

//kCCTransitionOrientationUpOver(下向上翻转)

//kCCTransitionOrientationDownOver(上向下翻转)

[10]:CCTransitionJumpZoom::create(时间,目标场景);

//本场景跳动消失后还有一场景跳动出现

[11]:CCTransitionMoveInB::create(时间,目标场景);

//还有一场景由总体从以下出现

[12]:CCTransitionMoveInL::create(时间,目标场景);

//还有一场景由总体从左面出现

[13]:CCTransitionMoveInT::create(时间,目标场景);

//还有一场景由总体从上面出现

[14]:CCTransitionMoveInR::create(时间,目标场景);

//还有一场景由总体从右面出现

[15]:CCTransitionPageTurn::create(时间,目标场景,bool);

//翻页切换,bool为true是向前翻。

[16]:CCTransitionProgressHorizontal::create(时间,目标场景);

//本场景从左到右消失同一时候还有一场景出现

[17]:CCTransitionProgressInOut::create(时间,目标场景);

//本场景从中间到四周消失同一时候还有一场景出现

[18]:CCTransitionProgressOutIn::create(时间,目标场景);

//本场景从四周到中间消失同一时候还有一场景出现

[19]:CCTransitionProgressRadialCCW::create(时间,目标场景);

//本场景逆时针消失到还有一场景

[20]:CCTransitionProgressRadialCW::create(时间,目标场景);

//本场景顺时针消失到还有一场景

[21]:CCTransitionProgressVertical::create(时间,目标场景);

//本场景从上到下消失同一时候还有一场景出现

[22]:CCTransitionRotoZoom::create(时间,目标场景);

//本场景旋转消失后还有一场景旋转出现

[23]:CCTransitionShrinkGrow::create(时间,目标场景);

//本场景缩小切换到还有一场景放大

[24]:CCTransitionSlideInB::create(时间,目标场景);

//本场景向上滑动到还有一场景

[25]:CCTransitionSlideInL::create(时间,目标场景);

//本场景向右滑动到还有一场景

[26]:CCTransitionSlideInR::create(时间,目标场景);

//本场景向左滑动到还有一场景

[27]:CCTransitionSlideInT::create(时间,目标场景);

//本场景向下滑动到还有一场景

[28]:CCTransitionSplitCols::create(时间,目标场景);

//本场景三矩形上下消失后还有一场景三矩形上下出现

[29]:CCTransitionSplitRows::create(时间,目标场景);

//本场景三矩形左右消失后还有一场景三矩形左右出现

[30]:CCTransitionTurnOffTiles::create(时间,目标场景);

//本场景小方块消失到还有一场景

[31]:CCTransitionZoomFlipAngular::create(时间,目标场景,样式);

//本场景翻转消失到还有一场景(斜上方)

//样式(能够不写):

//kCCTransitionOrientationLeftOver(左向右翻转)

//kCCTransitionOrientationRightOver(右向左翻转)

[32]:CCTransitionZoomFlipX::create(时间,目标场景,样式);

//本场景翻转消失到还有一场景(X轴)

//样式(能够不写):

//kCCTransitionOrientationLeftOver(左向右翻转)

//kCCTransitionOrientationRightOver(右向左翻转)

[33]:CCTransitionZoomFlipY::create(时间,目标场景,样式);

//本场景翻转消失到还有一场景(Y轴)

//样式(能够不写):

//kCCTransitionOrientationUpOver(下向上翻转)

//kCCTransitionOrientationDownOver(上向下翻转)

嗯, 这里借用孤狼大神整理的, 感谢哈, 嘿嘿, 我人比較懒

好了, 我们先来创建一个新的场景

创建一个名叫scene2的类, 从HelloWorld把代码复制过来, 注意要把类名这些换过来哦

#ifndef __SCENE2_H__
#define __SCENE2_H__ #include "cocos2d.h" class scene2 : public cocos2d::CCLayer
{
public:
//初始化一个场景, 成功返回TRUE, 失败返回FALSE
virtual bool init(); //创建一个场景, 返回类的实例指针, 说白了就是返回一个场景指针
static cocos2d::CCScene* scene(); //创建一个层
CREATE_FUNC(scene2);
}; #endif // __SCENE2_H__
#include "scene2.h"

USING_NS_CC;

CCScene* scene2::scene()
{
//创建场景对象, 而且返回它
CCScene *scene = CCScene::create(); //创建一个层
scene2 *layer = scene2::create(); //将层加入到场景中
scene->addChild(layer); return scene;
} bool scene2::init()
{
if ( !CCLayer::init() )
{
return false;
} return true;
}

这样, 一个新的场景就创建完毕了

我们在原来的场景上创建一张背景图片, 一个button, 额, 这个button我就用的是程序里面的关闭button, 函数内容一改, 嘿嘿, 你懂得( 旁白: 你这是没救了的节奏)

CCSprite* bg = CCSprite::create( "HelloWorld.png");
bg->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2));
addChild( bg); CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback)); pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,
origin.y + pCloseItem->getContentSize().height/2)); // create menu, it's an autorelease object
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu, 1);

关键的来了, 我们来改动一下关闭button的功能, 直接使用scene2的scene()函数创建了一个场景, 用导演类直接切换到我们新创建的场景

CCScene* myScene = scene2::scene();
CCDirector::sharedDirector()->replaceScene( myScene);

当然, 我们得把scene2的头文件引进来

#include "scene2.h"

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0MjQ5NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

再来改动scene2依样画葫芦, 我们再把scene2实现了:

	CCLabelTTF* ttf = CCLabelTTF::create( "SCENE_2", "Arial", 40);
ttf->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2));
addChild( ttf); CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(scene2::menuCloseCallback)); pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,
origin.y + pCloseItem->getContentSize().height/2)); // create menu, it's an autorelease object
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu, 1);

改动关闭函数, 在这个切换场景的时候, 我们选择使用了一个滑动切换场景的特效:

void scene2::menuCloseCallback(CCObject* pSender)
{
CCScene* myScene = HelloWorld::scene();
CCTransitionScene* tx = CCTransitionMoveInB::create( 2, myScene);
CCDirector::sharedDirector()->replaceScene( tx);
}

看看效果, 场景一切换到场景二:

直接一下就切换过去了, 没有不论什么效果

再看看场景二切换到场景一:

从以下把场景一拉上来的

行  今天我们在这里, 我希望你把所有这些特殊效果,看看有什么效果

版权声明:本文博客原创文章,博客,未经同意,不得转载。

cocos2dX 它CCScene创建原则和切换模式的更多相关文章

  1. Cocos2d-X研究之3.0 场景切换特效汇总

    Cocos2d-X研究之3.0 场景切换特效汇总 2014-08-05      0个评论    来源:游戏编程    收藏    我要投稿 cocos2d-x 3.0中场景切换特效比较多,而且游戏开 ...

  2. cocos2dx使用TiledMap创建斜45度地图场景

    做游戏,场景是一个很重要的部分,如果缺少这一步,很难做出好的游戏,对于cocos2dx来说,有很多2D的地图编辑器可以用,效果都还可以,其中Tiled是支持的比较好的,它支持Tiled编辑出来的几种模 ...

  3. 【创建型】Prototype模式

    原型模式主要是用原型实例指定创建原型对象的种类,并且通过拷贝原型创建新对象.最简单的理解就是克隆.就如cocos2d-x中的 class Clonable::clone();该模式的主要目的是可以在运 ...

  4. 互联网创业原则与创业模式attilax大总结

    互联网创业原则与创业模式attilax大总结 1. 适合普通人的的创业模式1 1.1. 网络创业  兼职创业 概念创业 团队 创业  内部创业..1 2. 创业模式大总结1 2.1. 工作室创业1 2 ...

  5. [Swift通天遁地]九、拔剑吧-(8)创建气泡式页面切换效果

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  6. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(4)-构建项目解决方案 创建EF DataBase Frist模式

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(4)-构建项目解决方案 创建EF DataBase Frist模式 进行本次文章之前,我们可能需要补充一些 ...

  7. 来了解一下Mysql索引的相关知识:基础概念、性能影响、索引类型、创建原则、注意事项

    索引的基础概念索引类似于书籍的目录,要想找到一本书的某个特定主题,需要先查找书的目录,定位对应的页码:存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的值,然后根据匹配的索引找到对应的数据行 ...

  8. 7.Git分支-分支简介、分支创建、分支切换

    1.分支简介 几乎所有的版本控制系统都支持某种形式的分支.使用分支意味着可以把你的工作从开发主线上分离开来,以免影响开发主线.Git的分支是其必杀技,它相对于其它版本控制系统来说,具有难以置信的轻量性 ...

  9. gitLib操作笔录《一》:创建分支,切换分支,提交分支到远程,以及基本代码clone与更新提交到远程操作指令

    git 操作经验注:master表示的是主线,origin 表示远程源 创建分支:git checkout -b < branch_name >或 < master >切换分支 ...

随机推荐

  1. hdu 2451 Simple Addition Expression(数位DP )成败在于细节

    亚洲区域赛的题,简单的数位DP题,注重细节. 任何细节都有可能导致wa,所以没有绝对的水题. 把握好细节,此题便A. #include<stdio.h> __int64 getans(__ ...

  2. hdu2955(变形01背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955 分析:被抓概率可以转换成安全概率,Roy的安全概率大于1-P时都是安全的. 抢劫的金额为0时,肯 ...

  3. 用XAML做网页!!—页头

    原文:用XAML做网页!!-页头 接续上次进度,我们此次来制作页头. 首先要实现两侧边缘的美化,如下图所示: 在边缘处有一层朦胧的亮度反光效果,这也是通过简单的渐变实现的,而且我们在后面的每个区块中都 ...

  4. 使用Visual Studio 创建可视Web Part部件

    使用Visual Studio 创建可视Web Part部件 可视Web Part部件是很强大的Web 部件.它提供内置设计器创建你的用户界面. 本文主要解说怎样使用Visual Studio 创建可 ...

  5. 《Android内核剖析》读书笔记 第13章 View工作原理【View树遍历】

    View状态分类 在View视图中定义了多种和界面效果相关的状态,比如拥有焦点Focused.按下Pressed等,不同的状态一般会显示不同的界面效果,而且视图状态会随着用户的操作而改变,一般通过xm ...

  6. HDU1071 The area 【积分】

    The area Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  7. poj2761(treap入门)

    给n个数,然后m个询问,询问任意区间的第k小的数,特别的,任意两个区间不存在包含关系, 也就是说,将所有的询问按L排序之后, 对于i<j ,   Li < Lj 且 Ri < Rj ...

  8. Android开发Thread+Handler演示样本(打地鼠)

    直接在代码 package com.mingrisoft; import java.util.Random; import android.app.Activity; import android.o ...

  9. [TroubleShooting]&#39;trn\bak&#39; is incorrectly formed. SQL Server cannot process this media family.

     SQL Server online consultants came across an interesting scenario where one of our client was una ...

  10. linux下Ftp环境的搭建

      Ftp环境的搭建 1.ftp软件的安装 使用ssh远程连接linux系统,上传和下载一些文件,Ftp是不可少的 Ftp的安装很简单,远程登录系统后使用命令 yum list vsftpd 通过提示 ...