四,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. oracle connect nocycle

    select * from uc_staff_department_level t,uc_t_staff stwhere st.id=t.staff_idand t.department_id in ...

  2. 自定义cas客户端核心过滤器AuthenticationFilter

    关于cas客户端的基本配置这里就不多说了,不清楚的可以参考上一篇博文:配置简单cas客户端.这里是关于cas客户端实现动态配置认证需要开发说明. 往往业务系统中有些模块或功能是可以不需要登录就可以访问 ...

  3. 开源 免费 java CMS - FreeCMS1.5-数据对象-job

    下载地址:http://code.google.com/p/freecms/ job 从FreeCMS 1.5 开始支持 在使用职位相关标签时,标签会封装job供页面调用. 属性 说明 id id s ...

  4. Spring -- 三种配置方式

    1.Explicit configuration in XML:显示的XML配置. 优点: 1)XML配置方式进一步降低了耦合,使得应用更加容易扩展,即使对配置文件进一步修改也不需要工程进行修改和重新 ...

  5. android 上线流程

    1.首先打开安卓市场官网,在右上角找到注册按钮,先注册成为开发者. 2.而后点击“开发者”进入“开发者中心”页面(也可从网页下方的“开发者入口”进入). 3.选择“发布软件”选项,依次上传创建的APP ...

  6. Codeforces Round #228 (Div. 1) C 贪心

    嘎嘎,今天被一些事耽误了,可是还是A了几个题目,这道题还不错 题目链接: 题意:两个人玩游戏,有N堆纸牌,纸牌上有数字,A每次仅仅能取N堆中的 当中一个的顶部的 纸牌,B仅仅能取N堆中的当中一个底部 ...

  7. Java 基础【11】.class getClass () forName() 详解

    类名.class是Class对象的句柄,每个被加载的类,在jvm中都会有一个Class对象与之相对应. 如果要创建新的对象,直接使用Class对象的局部class.forName就可以了,不需要用ne ...

  8. vim插件之pathogen,NERDTree,Command-T,Powerline

    pathogen 功能说明 一个插件包往往具备多种功能,每个文件根据Vim的路径约定会放置到不同的目录下,通用插件放到plugin下,语法高亮插件放到syntax下,自动加载插件放到autoload下 ...

  9. idea 配置多个tomcat

      1.打开设置窗口 File-->Settings 2.启用tomcat 3.run-->edit configuration: 3.点击左上角+号-->找到Tomcat Serv ...

  10. 【Linux】文件描述符与重定向

    重定向符号 符号 描述 > 输出重定向到一个文件或设备 覆盖原来的文件 >! 输出重定向到一个文件或设备 强制覆盖原来的文件 >> 输出重定向到一个文件或设备 追加原来的文件 ...