四,Director Scene Layer和Sprite(导演,场景,层和精灵)

1.Scenes(场景)

一个场景 (用CCScene对象实现)相当于APP工作流的独立部分。一些人也喜欢叫做“屏幕”或“舞台”。你的App可以有许多屏幕,但在特定时间内只有一个是处于激活状态。 例如你的一个游戏中有这些场景:介绍,主菜单,关卡1,剧情动画1,关卡2,胜利过场动画,失败过场动画,高分屏。你认为这些场景可以作为一个单独的应用程序,该应用程序只需要很少的连接代码就可以跳到其他的场景。例如介绍场景完成后可能直接跳到主菜单场景,下面是一个假设的游戏流程图:

一个cocos2d CCScene是由一个或多个CCNodes组成, CCNodes还可以做为子类嵌套。CCNodes的子类如CCLayer和CCSprite会给定场景的外观和行为。通常你实现CCLayer的子类并添加到空白的CCScene实例中。然后实现你的其他图形和游戏对象把它们作为CCNodes 添加到CCLayer中。因为场景是CCNode的子类,

它们能被手动或使用CCActions来变换。场景的切换可以通过CCScene 的子类CCTransitionScene类来处理。这些允许你创建特定切换效果。比如渐入渐出等之类的场景切换效果。

2.Director(导演)

CCDirector是一个共享的单例对象,它提供场景之间的导航。它知道当前被激活的场景并允许你改变场景。当你把一个新场景放入栈中,CCDirector会暂停先前的场景,但还是会保留在内存中。当你中栈顶取出顶部的场景时,先前暂停的场景会回复它上一次的状态。CCDirector还负责初始化OpenGL ES。

3.Layers(层)

一个CCLayer是一个CCNode它知道如何处理触摸事件。层知道如何绘制它们自己并可能是半透明,允许玩家看到背后的其他层。CCLayers在定义你游戏的外观和行为上非常有用,因此你应该耗费大量时间在CCLayer子类的编写上。如下图所示:

CCLayer是定义你处理触摸事件的地方。通过实现一个方法来处理触摸事件(ccTouchBegan,ccTouchMoved,ccTouchEnded,ccTouchCancelled)并与玩家互动。这些触摸时间被传递到一个场景内的所有层中,由前向后,直到一些层捕获事件并接受它。而复杂的应用程序将要求你定义CCLayer的子类,cocos2d提供一些预定义的层。一些例子包括CCMenu(一个简单的菜单层),CCColorLayer(一个实体颜色层),CCLayerMultiplex(一个多样化的层,让你多种不同的子元素中,每次激活一个元素但关闭其他元素)。层可以包含任意的CCNode,如CCSprites,CCLabels或CCLayer他自己。因为层是CCNode的子类,它们能被手动或使用CCActions来变换。以下是CCLayerMultiplex的例子代码:

     CCLayerGradient* layer1 = CCLayerGradient::create(ccc4(, , , ), ccc4(, , , ));

     layer1->setContentSize(CCSizeMake(, ));

     layer1->setPosition(ccp(,));

     addChild(layer1);

     CCLayerGradient* layer2 = CCLayerGradient::create(ccc4(, , , ), ccc4(, , , ));

     layer2->setContentSize(CCSizeMake(, ));

     layer2->setPosition(ccp(,));

     addChild(layer2);

    CCLayerGradient* layer3 = CCLayerGradient::create();

    layer3->setContentSize(CCSizeMake(, ));

    layer3->setPosition(ccp(,));

    layer3->setStartColor(ccc3(, , ));

    layer3->setEndColor(ccc3(, , ));

    layer3->setStartOpacity();

    layer3->setEndOpacity();

    ccBlendFunc blend;

    blend.src = GL_SRC_ALPHA;

    blend.dst = GL_ONE_MINUS_SRC_ALPHA;

    layer3->setBlendFunc(blend);

    addChild(layer3);

Sprites(精灵)

一个cocos2d CCSprite其实和其他游戏引擎的sprites类似。这是一个2D图像,可以移动,旋转,缩放,动画,并接受其他转换。当然精灵也能嵌套。它父类精灵被转换时,它的所有子元素也会被转换。同样精灵也是CCNode的子类,任何转换都适用于CCActions

五,场景切换

Cocos2d-x提供一个非常酷的功能,就是两个不同场景间的切换。擦拭,淡入淡出,缩放,分裂。它依赖于CocosNode 并类似于层,从技术上来讲场景过渡也是一个场景,它承前启后。相比用过Android源生的同学都知道,android也有这样的功能,但cocos2d-x的过渡效果更加强大。

1.创建过渡

他的时间单位为秒,应用场景转换的语法如下所示:

CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(0.5,newScene));

它提供一些过渡自定义参数,如FadeTransition有一个淡入淡出的颜色作为一个额外的参数如下代码所示:
static
CCTransitionFade* create(float duration,CCScene* scene, const ccColor3B&
color);
对于场景过渡它得心应手,下面是一个小例子:

CCScene *s = SecondPage::scene();

CCDirector::sharedDirector()->setDepthTest(true);

CCTransitionScene *transition = CCTransitionPageTurn::create(3.0f, s, false);

如果你运行上面的代码你将会有一个翻页的效果:

六,效果

1.导言

效果是一个特殊类型的action。它不是修改一些常用的属性,如透明度,位置,旋转,缩放。而是修改一个新的属性:grid。一个grid属性像一个矩阵,它是一个网络的线路,相互交叉,形成一系列的正方形或长方形。这些特殊的动作渲染于任何的CocosNode对象(Layer, Scene, Sprite等)到grid,并且你能通过改变它们的顶点来变换grid。下面有两种girds:tiled girds和非tiled grids。它们的区别是tiled girds是由于个体的tiles组成而非tiled grids由顶点组成。如下图所示:

下面是一个Ripple3D动作的例子,它使用是Grid3D(非tiled)grid:
 

下面是一个FadeOutTR 动作,它使用是TiledGrid3D(tiled)grid:
 

2.如何使用它们

任何其他的action,都是通过runAciton执行:

// Create an sprite

CCSprite* grossini = CCSprite::create("grossini.png");

grossini->runAction(CCLiquid::create(, , ccg(,), ));

液体类似的效果,它们接收gird参数。你可以通过增加网格的大小调整效果的质量。但它也意味着更少的FPS。这种效果是IntervalAction动作,因此你能对待其他动作一样处理:

// create a Lens3D action
CCActionInterval* lens = CCLens3D::create(ccp(,),,ccg(,),); // create a Waved3D action
CCActionInterval* waves = CCWaves3D::create(,,ccg(,),); // create a sequence an repeat it forever
grossini->runAction(CCRepeatForever::create((CCSequence*)CCSequence::create(waves, lens, NULL ) ) );

以下是使用Grid3D (非tiled)的action,基于v2.1.0版本

Shaky3D  

Waves3D  

FlipX3D  

FlipY3D  

       

Lens3D  

Liquid  

Waves  

Twirl  

       

Ripple3D  

 

以下是使用TiledGrid3D(tiled)的action

ShakyTiles3D  

ShatteredTiles3D  

ShuffleTiles  

FadeOutTRTiles  

       

FadeOutBLTiles  

FadeOutUpTiles  

FadeOutDownTiles  

TurnOffTiles  

       

WavesTiles3D  

JumpTiles3D  

SplitRows  

SplitCols  

       

cocos2d-x开发记录:二,基本概念(导演,场景,层和精灵,场景切换,效果)的更多相关文章

  1. Dokuwiki 二次开发记录

    Dokuwiki 二次开发记录 [转]http://www.syyong.com/other/Dokuwiki-Secondary-Development-Record.html DokuWiki 是 ...

  2. SQL开发技巧(二)

    本系列文章旨在收集在开发过程中遇到的一些常用的SQL语句,然后整理归档,本系列文章基于SQLServer系列,且版本为SQLServer2005及以上-- 文章系列目录 SQL开发技巧(一) SQL开 ...

  3. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  4. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(二)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2339490.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  5. .NET Web开发总结(二)

    第二章 4.1  Application对象 在.NET开发中具有举足轻重的作用 Application对象的作用和运行机制存储所有用户的信息将一个网站创建一个应用程序一 . 创建一个Global文件 ...

  6. SQL开发技巧(二) 【转】感觉他写的很好

    本文转自: http://www.cnblogs.com/marvin/p/DevelopSQLSkill_2.html 本系列文章旨在收集在开发过程中遇到的一些常用的SQL语句,然后整理归档,本系列 ...

  7. CozyRSS开发记录9-快速实现一个RSS解析器

    CozyRSS开发记录9-快速实现一个RSS解析器 1.再读RSS标准 既然需要自己实现一个RSS解析器,那自然需要仔细的读一读RSS的标准文档.在网上随便找了两份,一份英文一份中文: http:// ...

  8. ASP.NET MVC5 网站开发实践(二) Member区域 - 修改及删除文章

    上次做了显示文章列表,再实现修改和删除文章这部分内容就结束了,这次内容比较简单,由于做过了添加文章,修改文章非常类似,就是多了一个TryUpdateModel部分更新模型数据.   目录: ASP.N ...

  9. ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表

    显示文章列表分两块,管理员可以显示全部文章列表,一般用户只显示自己的文章列表.文章列表的显示采用easyui-datagrid.后台需要与之对应的action返回json类型数据   目录 ASP.N ...

随机推荐

  1. 代码生成器的关键代码(读取PDM文件)

    /// <summary> /// 处理PDM文件 /// </summary> public class DoPDMDal:IDoDataBaseDal { public L ...

  2. poj 3345 Bribing FIPA (树形背包dp | 输入坑)

    题目链接:  poj-3345  hdu-2415 题意 有n个国家,你要获取m个国家的支持,获取第i个国家的支持就要给cost[i]的价钱    其中有一些国家是老大和小弟的关系,也就是说,如果你获 ...

  3. 设计模式——门面模式(Facade)

    要想正确理解设计模式,首先必须明白它是为了解决什么问题而提出来的. 设计模式学习笔记 --Shulin 转载请注明出处:http://blog.csdn.net/zhshulin 1.概念 门面模式是 ...

  4. 虚拟机里面做了个MySQLS主从:

    虚拟机里面做了个主从: 但是IO现成一直不能跟主库上的dump现成通信, Slave_IO_Running: No Last_IO_Error: error connecting to master ...

  5. taro 不支持render中,使用函数多条件渲染

    不支持render中,使用函数多条件渲染 h5不报错,但是编译成小程序时 会报错 错误写法: onRenderContent = () => { const { verified, recogn ...

  6. Java 基础【12】 日期类型

    java api中日期类型的继承关系 java.lang.Object --java.util.Date --java.sql.Date --java.sql.Time --java.sql.Time ...

  7. JPA实体继承实体的映射策略

    注:这里所说的实体指的是@Entity注解的类 继承映射使用@Inheritance来注解.它的strategy属性的取值由枚举InheritanceType来定义(包含SINGLE_TABLE.TA ...

  8. PHP-中文在计算机中的存储

    经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, WordPress程序是用的UTF-8,很多cms用的是GB2312. ● 为什么有这么多编码? ...

  9. HDUOJ---1233还是畅通工程

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  10. Android获取屏幕大小和设置无标题栏

    android获取屏幕大小非常常用,例如写个程序,如果要做成通用性很强的程序,适用屏幕很强,一般布局的时候都是根据屏幕的长宽来定义的,所以我把这个总结一下,方便日后忘记的时候查阅.还有就是有时候写程序 ...