上一篇博客介绍了整个cocos2dx引擎需要掌握的各个模块,每一个模块实际上往深了研究都有难点,后面我会详细地去分析它的用法。今天我们从第一个模块说起,即渲染模块。首先,为了理解,我们做个类比,说明该模块中几个类之间的关系:

如果把一个游戏项目的开发比作一部电影的制作的话,那么导演(CCDirector类)的作用也就不言而喻,它控制整个游戏的良好运行。导演可以决定这部电影的拍摄场景(CCScene类),比如说在北京,场景可能会根据需要进行转移,因此场景可能会有多个,但同一时刻只能在一个地方。地点确定好了,就要选址,搭建摄影棚,也就是拍摄场地(CCLayer类),然后就是演员们(CCSprite类)的表演了,这样就完成了一部电影的拍摄过程,但是别忘了后期制作,比如需要给电影加上字幕(CCLabel类)等,那么菜单呢,可以理解为开头的介绍,比如主演:xx 导演:xx 。说道这里我想大家都能理解透彻了。下面简单介绍用法:

  导演类:CCDirector

它是一个单例,在整个游戏运行期间只实例化一次,维护一个实例对象。

场景类:CCScene
      可以理解为一个容器,就像剧院一样,在剧院中搭建舞台(即CCLayer)上演节目。一个场景中可以有多个层CCLayer,我们可以通过层的Z轴标记或者层的名字来找到这个层对象。场景可以做特效,即不同场景进行切换时的效果,比如淡进淡出、百叶窗、旋转缩小等。
刚开始的时候对层和场景可能会有点蒙,主要是因为项目自带的这个HelloWorldScene(有的是HelloWorldLayer)搞得鬼,实际上我们不是那么用的,实际项目中一般不写“static CCScene* scene();”这个方法。我们一般需要场景的时候直接创建一个自定义的场景类,继承CCScene,在任何需要切换场景的地方,创建我们自定义的场景类,并由导演类来切换场景:

图层类:CCLayer
      个人理解就是做画面渲染的,好比画家手中的画板,我们可以在上面涂鸦,添加精灵。现在的游戏通常至少要分三个层,例如一个简单的主菜单画面:

       这三个层互相叠加,他们在Z轴上的坐标不同,实际上就是addChild(layer,5)中数字的标记,值越大越靠近屏幕外侧,也就是最外层。上图BackgroundLayer层号为0,AnimationLayer层号为1,MenuLayer层号为2,最靠外。图层的顺序决定了渲染的次序和交互信息传递(即用户响应)的顺序,这涉及到触摸和重力加速计的知识点,后面会单独拿出来讲。
       层--最重要的就是能够“接受用户操作”,除此之外还可以填充游戏背景颜色等。通常我们创建一个类,继承CCLayer,并添加“virtual bool init()”方法进行初始化,并在其中添加新的内容,实现我们的功能。
--init()方法内部必须调用父类的init()方法做初始化工作--
注:virtual关键字声明虚函数,就是说,如果以后扩展了子类,子类重写这个init()方法,那么运行时子类对象执行的是子类的init()方法,屏蔽掉父类的init()方法,其他方法同理。

精灵类:CCSprite
      本质上,就是一张2d图片,但是难点还是很多的,比如锚点(CCAnchorPoint)和位置(CCPosition)的区别,精灵帧动画的三种方式,还有使用cocoStudio编辑器做骨骼动画等,这些都会单独拿出来去讲,我们先介绍精灵的用法,再解释一下锚点和位置:

锚点和位置的区别:

      首先,要区别精灵和图片,实际上精灵只是层中的一个点而已,这个点就是精灵的位置(position),如果不给它附上图片的话,它就是一个点,图片让它有了可视化的形象,由于图片肯定不是一个点,而是一个矩形的框,那么给精灵附加图片的时候,该把图片的哪个位置放到精灵的位置(position)上呢,这就是锚点的作用,设置锚点(anchorPoint)实际上是更改了图片的中心点,默认的时候中心点在图片的中间,锚点是(0.5,0.5):也就是说图片的中心点是通过anchorPoint来设置。
      设图片宽为W = 100 ,高 为 H = 200 :设置中心点时坐标系以图片的左下角为原点画坐标系
      当anchorPoint为(0,0):图片的中心点在(100 * 0,200 * 0)处,这只是图片的中心点,千万记住
      当anchorPoint为(0.5,0.5):图片的中心点在(100 * 0.5,200 * 0.5)处;也就是视觉上的图片中心
      当anchorPoint为(1,1):图片的中心点在(100 * 1,200 * 1)处;

      锚点理解了,就好办了,实际上给精灵附加上图片以后,就是图片的锚点位置(图中红圈的地方)放在精灵的position位置处。但是实践经验上来说,尽量能不改锚点就不改锚点,因为貌似复杂情况会出问题,之前就是不同电脑显示不一样。

文字类:CCLabel
比较简单,不想多说,给一个链接:点击打开链接-CCLabel,有时间回来补充。

菜单类:CCMenu
创建一个菜单的思路很简单,首先得有菜单项,然后基于菜单项创建菜单,菜单项要能点击,因此还要添加事件的监听回调函数。由于菜单项可以是多种多样的,因此,引擎提供了多种创建菜单项的类,直接看代码:

 

渲染框架大体介绍这些,好多细节的难点会在后面单独研究,基础部分也就这些吧,其他的稍有难度,下一篇开始进阶吧。
     

cocos2d-x知识巩固-基础篇(2)的更多相关文章

  1. Linux虚拟网络:Docker网络知识之基础篇

    我们在工作中应用了docker容器化技术,服务的部署.维护和扩展都方便了很多.然而,近期在私有化部署过程中,由于不同服务器环境的复杂多变,常常遇到网络方面的问题,现象为容器服务运行正常,但宿主机.容器 ...

  2. cocos2d-x知识巩固-基础篇(1)

    有段时间没有学习cocos2dx了,作为新人,自己觉得还是要稳扎稳打,一点点的去积累,梳理好每一个知识点,这样对自己的成长能够有一个更清晰的认识,以便做更好的提高. 从2013年8月开始接触cocos ...

  3. 测试人员需要了解的sql知识(基础篇)

    这是第一篇关于数据库的,本着详细的原则,基础的还是不能放过,还是那句话,有问题,欢迎指出! ------------------------------------------------------ ...

  4. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  5. [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型

    引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...

  6. Jmeter 接口测试知识梳理——应用基础篇

    Jmeter 使用也有很长时间了,但是一直没有做一下知识梳理,近期会对公司同事做一下这方面的培训,借此机会,把使用过程中应用到的知识,或是遇到的问题,整理出来,方便大家学习! Jmeter 接口测试知 ...

  7. 【matlab 基础篇 02】基础知识一键扫盲,看完即可无障碍编程(超详细+图文并茂)

    博主快速入门matlab,系统地整理一遍,如何你和我一样是一个新手,那么此文很适合你: 本人能力有限,文中难免有错误和纰漏之处,请大佬们不吝赐教 创作不易,如果本文帮到了您: 请帮忙点个赞

  8. C#多线程之基础篇3

    在上一篇C#多线程之基础篇2中,我们主要讲述了确定线程的状态.线程优先级.前台线程和后台线程以及向线程传递参数的知识,在这一篇中我们将讲述如何使用C#的lock关键字锁定线程.使用Monitor锁定线 ...

  9. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

随机推荐

  1. 【Linux高频命令专题(11)】cp

    概述 cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数.但是 ...

  2. JavaScript DOM编程基础精华03(动态设置,层的操作,性能问题)

    代码是否需要放置到onload中  //如果js代码需要操作页面上的元素,则将该代码放到onload里面.         //因为当页面加载完毕之后页面上才会有相关的元素 //如果js代码中没有操作 ...

  3. 内存单元按字节编址,地址0000A000H~0000BFFFH共有几个存储单元

    一般可以这样:按十六进制(bffff-a000)+1=1fff+12000H=2x16x16x16=81928192/1024=8 最后是8k或者按二进制bfff-a000=0001 1111 111 ...

  4. 【原创】MySql 数据库导入导出(备份)

    啥不说了,两周前刚刚做过mysql导入导出的结果现在又忘了.. 更可悲的是竟然同样的三篇blog,现在看起来还是如当初一样费劲,里面的内容..所以自己写个记录一下 环境:*nix 权限:有相关表的写读 ...

  5. ActiveMQ集群(2)

    ActiveMQ具有强大和灵活的集群功能,但在使用的过程中会发现很多的缺点,ActiveMQ的集群方式主要有两种:Master-Slave和Broker Cluster. 1.Master-Slave ...

  6. IDEA 创建Web项目并在Tomcat中部署运行

    IDEA 14.0.5 apache-tomcat-8.0.32 步骤:File->New Project,在Java列表中勾选Web Application(3.1),点击Next 建立web ...

  7. 【转】android 自定义控件

    Android自定义View实现很简单 继承View,重写构造函数.onDraw,(onMeasure)等函数. 如果自定义的View需要有自定义的属性,需要在values下建立attrs.xml.在 ...

  8. 关于引用mshtml的问题

    今天看了个验证码识别的代码,其中引用到了mshtml.dll,找了半天原来就是microsoft.mshtml.dll.查这个dll的时候还发现了好几篇关于这个dll添加问题的文章.顺便看了下,原来这 ...

  9. vi编辑器基本用法介绍

    vi是Linux系统中编写文件的工具 如果vi出现乱码情况,需要升级vi,命令如下: sudo apt-get install vim  //升级vi vi的启动方式有两种,直接使用vi命令和在vi命 ...

  10. unison + inotify 实现文件实时双向同步部署步骤

    unison + inotify 实现文件实时双向同步部署步骤 一. Unison简介 Unison是Windows.Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或 ...