cocos2dX 它CCScene创建原则和切换模式
今天, 让我们来看看现场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创建原则和切换模式的更多相关文章
- Cocos2d-X研究之3.0 场景切换特效汇总
Cocos2d-X研究之3.0 场景切换特效汇总 2014-08-05 0个评论 来源:游戏编程 收藏 我要投稿 cocos2d-x 3.0中场景切换特效比较多,而且游戏开 ...
- cocos2dx使用TiledMap创建斜45度地图场景
做游戏,场景是一个很重要的部分,如果缺少这一步,很难做出好的游戏,对于cocos2dx来说,有很多2D的地图编辑器可以用,效果都还可以,其中Tiled是支持的比较好的,它支持Tiled编辑出来的几种模 ...
- 【创建型】Prototype模式
原型模式主要是用原型实例指定创建原型对象的种类,并且通过拷贝原型创建新对象.最简单的理解就是克隆.就如cocos2d-x中的 class Clonable::clone();该模式的主要目的是可以在运 ...
- 互联网创业原则与创业模式attilax大总结
互联网创业原则与创业模式attilax大总结 1. 适合普通人的的创业模式1 1.1. 网络创业 兼职创业 概念创业 团队 创业 内部创业..1 2. 创业模式大总结1 2.1. 工作室创业1 2 ...
- [Swift通天遁地]九、拔剑吧-(8)创建气泡式页面切换效果
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(4)-构建项目解决方案 创建EF DataBase Frist模式
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(4)-构建项目解决方案 创建EF DataBase Frist模式 进行本次文章之前,我们可能需要补充一些 ...
- 来了解一下Mysql索引的相关知识:基础概念、性能影响、索引类型、创建原则、注意事项
索引的基础概念索引类似于书籍的目录,要想找到一本书的某个特定主题,需要先查找书的目录,定位对应的页码:存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的值,然后根据匹配的索引找到对应的数据行 ...
- 7.Git分支-分支简介、分支创建、分支切换
1.分支简介 几乎所有的版本控制系统都支持某种形式的分支.使用分支意味着可以把你的工作从开发主线上分离开来,以免影响开发主线.Git的分支是其必杀技,它相对于其它版本控制系统来说,具有难以置信的轻量性 ...
- gitLib操作笔录《一》:创建分支,切换分支,提交分支到远程,以及基本代码clone与更新提交到远程操作指令
git 操作经验注:master表示的是主线,origin 表示远程源 创建分支:git checkout -b < branch_name >或 < master >切换分支 ...
随机推荐
- SE 2014年5月23日
两站点 A 和 B,由于业务往来需要,所以工程师提出vpn技术,同时需要保证业务流在internet上的安全性,同时在这里站点均为固定ip地址. 通过分析以上信息,确定这里使用 IPSec VPN的主 ...
- 基于 Apache Mahout 构建社会化推荐引擎
基于 Apache Mahout 构建社会化推荐引擎 http://www.ibm.com/developerworks/cn/views/java/libraryview.jsp 推荐引擎利用特殊的 ...
- mybatis 打印SQL语句
在log4j文件中配置 log4j.rootLogger=DEBUG log4j.logger.com.ibatis=DEBUG log4j.logger.org.mybatis=DEBUG
- WPF界面设计技巧(10)-样式的继承
原文:WPF界面设计技巧(10)-样式的继承 PS:现在我的MailMail完工了,进入内测阶段了,终于可以腾出手来写写教程了哈,关于MailMail的介绍及内测程序索取:http://www.cnb ...
- Difference between datacontract and messagecontract in wcf
在WCF中有两种契约各自是DataContract和MessageContract,这篇博客来讲一下两者的差别.先看一下两者定义契约实体的方式有和不同. 1.数据契约 <span style=& ...
- Linux php/php-fpm 安装,配置
1> 下载php源代码 #wget http://cn2.php.net/get/php-5.4.30.tar.gz/from/this/mirror 官网5.2的版本号貌似没提供 ...
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第一步--- 开始界面
说明:这里是平局:晓风残月前辈的博客.他是将泰然网的跑酷教程.用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...
- 基于三星ARM9(S3C2410)的交通违章抓拍系统的开发
ARM9的交通违章抓拍系统的开发 ARM9的交通违章抓拍系统的开发 智能交通系统(ITS)将先进的信息技术.数据通讯传输技术.电子控制技术.计算机处理技术等应用于交通运输行业,从而实现各种运输方式 ...
- hdu1372 dfs搜索之国际象棋的马
原题地址 题意 一个8x8的国际象棋棋盘,你有一个棋子"马".算出棋子"马"从某一格到还有一格子的最少步数. 与普通dfs不同的是,你能走的路线不是上下左右,四 ...
- mySQL中删除unique key的语法 (删除某个字段的唯一性)
mySQL中删除unique key的语法 CREATE TABLE `good_booked` ( `auto_id` int(10) NOT NULL auto_increment, `goo ...