上一篇博客介绍了整个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. cojs 简单的区间问题 解题报告

    新学了些弦图和区间图的新玩意,于是就想着出一道题目 其实这道题不用弦图和区间图的理论也是可以做的 首先考虑第一问,第一问是一个NOIP普及组水平的贪心 我们把区间按照右端点从小到大排序,之后从头到尾扫 ...

  2. Project Euler 94:Almost equilateral triangles 几乎等边的三角形

    Almost equilateral triangles It is easily proved that no equilateral triangle exists with integral l ...

  3. Unigui有用的网址

    http://www.cnblogs.com/ChinaEHR/tag/Delphi/

  4. C# 时间函数

    DateTime dt = DateTime.Now; string str = dt.ToString("yyyy-MM-dd");//2013-09-07 str = dt.T ...

  5. 使用 Spring 3 来创建 RESTful Web Services(转)

    使用 Spring 3 来创建 RESTful Web Services 在 Java™ 中,您可以使用以下几种方法来创建 RESTful Web Service:使用 JSR 311(311)及其参 ...

  6. Spring与Struts2整合VS Spring与Spring MVC整合

    Spring与Struts2整合,struts.xml在src目录下 1.在web.xml配置监听器 web.xml <!-- 配置Spring的用于初始化ApplicationContext的 ...

  7. 249. Group Shifted Strings

    题目: Given a string, we can "shift" each of its letter to its successive letter, for exampl ...

  8. 英文论文写作之讨论与结论Discussion and Conclusion

    Discussion and Conclusion After viewing these maps, what should immediately appear is the level of r ...

  9. 【HDOJ】4080 Stammering Aliens

    1. 题目描述给定一个长为$n \in [1, 4000]$的字符串,求其中长度最长的子串,并且该子串在原串中出现至少$m$次,并求最右起始位置. 2. 基本思路两种方法:二分+后缀数组,或者二分+哈 ...

  10. Android下 ionic view 无法登录

    ionic view一个超棒工具,它是测试 ionic 框架搭建项目的app软件. 在它的官网有iphone 和 android 版本的下载地址.但是,这里只有在 google play 里面才有,而 ...