cocos2d-x知识巩固-基础篇(2)
上一篇博客介绍了整个cocos2dx引擎需要掌握的各个模块,每一个模块实际上往深了研究都有难点,后面我会详细地去分析它的用法。今天我们从第一个模块说起,即渲染模块。首先,为了理解,我们做个类比,说明该模块中几个类之间的关系:
如果把一个游戏项目的开发比作一部电影的制作的话,那么导演(CCDirector类)的作用也就不言而喻,它控制整个游戏的良好运行。导演可以决定这部电影的拍摄场景(CCScene类),比如说在北京,场景可能会根据需要进行转移,因此场景可能会有多个,但同一时刻只能在一个地方。地点确定好了,就要选址,搭建摄影棚,也就是拍摄场地(CCLayer类),然后就是演员们(CCSprite类)的表演了,这样就完成了一部电影的拍摄过程,但是别忘了后期制作,比如需要给电影加上字幕(CCLabel类)等,那么菜单呢,可以理解为开头的介绍,比如主演:xx 导演:xx 。说道这里我想大家都能理解透彻了。下面简单介绍用法:
导演类:CCDirector
它是一个单例,在整个游戏运行期间只实例化一次,维护一个实例对象。
场景类:CCScene
可以理解为一个容器,就像剧院一样,在剧院中搭建舞台(即CCLayer)上演节目。一个场景中可以有多个层CCLayer,我们可以通过层的Z轴标记或者层的名字来找到这个层对象。场景可以做特效,即不同场景进行切换时的效果,比如淡进淡出、百叶窗、旋转缩小等。
刚开始的时候对层和场景可能会有点蒙,主要是因为项目自带的这个HelloWorldScene(有的是HelloWorldLayer)搞得鬼,实际上我们不是那么用的,实际项目中一般不写“static CCScene* scene();”这个方法。我们一般需要场景的时候直接创建一个自定义的场景类,继承CCScene,在任何需要切换场景的地方,创建我们自定义的场景类,并由导演类来切换场景:
图层类:CCLayer
个人理解就是做画面渲染的,好比画家手中的画板,我们可以在上面涂鸦,添加精灵。现在的游戏通常至少要分三个层,例如一个简单的主菜单画面:
层--最重要的就是能够“接受用户操作”,除此之外还可以填充游戏背景颜色等。通常我们创建一个类,继承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)处;
文字类:CCLabel
比较简单,不想多说,给一个链接:点击打开链接-CCLabel,有时间回来补充。
菜单类:CCMenu
创建一个菜单的思路很简单,首先得有菜单项,然后基于菜单项创建菜单,菜单项要能点击,因此还要添加事件的监听回调函数。由于菜单项可以是多种多样的,因此,引擎提供了多种创建菜单项的类,直接看代码:
渲染框架大体介绍这些,好多细节的难点会在后面单独研究,基础部分也就这些吧,其他的稍有难度,下一篇开始进阶吧。
cocos2d-x知识巩固-基础篇(2)的更多相关文章
- Linux虚拟网络:Docker网络知识之基础篇
我们在工作中应用了docker容器化技术,服务的部署.维护和扩展都方便了很多.然而,近期在私有化部署过程中,由于不同服务器环境的复杂多变,常常遇到网络方面的问题,现象为容器服务运行正常,但宿主机.容器 ...
- cocos2d-x知识巩固-基础篇(1)
有段时间没有学习cocos2dx了,作为新人,自己觉得还是要稳扎稳打,一点点的去积累,梳理好每一个知识点,这样对自己的成长能够有一个更清晰的认识,以便做更好的提高. 从2013年8月开始接触cocos ...
- 测试人员需要了解的sql知识(基础篇)
这是第一篇关于数据库的,本着详细的原则,基础的还是不能放过,还是那句话,有问题,欢迎指出! ------------------------------------------------------ ...
- jQuery学习笔记 - 基础知识扫盲入门篇
jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...
- [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型
引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...
- Jmeter 接口测试知识梳理——应用基础篇
Jmeter 使用也有很长时间了,但是一直没有做一下知识梳理,近期会对公司同事做一下这方面的培训,借此机会,把使用过程中应用到的知识,或是遇到的问题,整理出来,方便大家学习! Jmeter 接口测试知 ...
- 【matlab 基础篇 02】基础知识一键扫盲,看完即可无障碍编程(超详细+图文并茂)
博主快速入门matlab,系统地整理一遍,如何你和我一样是一个新手,那么此文很适合你: 本人能力有限,文中难免有错误和纰漏之处,请大佬们不吝赐教 创作不易,如果本文帮到了您: 请帮忙点个赞
- C#多线程之基础篇3
在上一篇C#多线程之基础篇2中,我们主要讲述了确定线程的状态.线程优先级.前台线程和后台线程以及向线程传递参数的知识,在这一篇中我们将讲述如何使用C#的lock关键字锁定线程.使用Monitor锁定线 ...
- 一步步学习javascript基础篇(0):开篇索引
索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...
随机推荐
- 【Linux高频命令专题(3)】uniq
简述 用途 报告或删除文件中重复的行. 语法 uniq [ -c | -d | -u ] [ -f Fields ] [ -s Characters ] [ -Fields ] [ +Characte ...
- WCF入门(六)---主机WCF服务
建立一个WCF服务后,下一步就是托管它,以便客户端应用程序可以使用,这就是所谓的WCF服务托管. WCF服务可以通过使用任何的四种方法如下托管. IIS主机 - IIS是Internet信息服务的缩写 ...
- linux 显示当前用户信息
1.w命令 2.who命令 3.who am i 4. users
- Android Studio安装、配置
Google在2013年I/O大会上发布了Android Studio,AndroidStudio是一个基于IntelliJ IDEA的Android开发工具.这个IDE要比eclipse智能很多,具 ...
- NSMutableArray 初始化与添加删除程序
Person *person1=[[Person alloc]initWithName:@"Kenshin"]; Person *person2=[[P ...
- C++:调整基类成员在派生类中的访问属性的其他方法(同名成员和访问声明)
4.3 调整基类成员在派生类中的访问属性的其他方法 4.3.1 同名函数 在定义派生类的时候,C++语言允许在派生类中说明的成员与基类中的成员名字相同,也就是 说,派生类可以重新说明与基类成员同名的成 ...
- POJ3009——Curling 2.0(DFS)
Curling 2.0 DescriptionOn Planet MM-21, after their Olympic games this year, curling is getting popu ...
- PHP程序员最常犯的11个MySQL错误
对于大多数web应用来说,数据库都是一个十分基础性的部分.如果你在使用PHP,那么你很可能也在使用MySQL—LAMP系列中举足轻重的一份子. 对于很多新手们来说,使用PHP可以在短短几个小时之内轻松 ...
- EXC_BAD_ACCESS
EXC_BAD_ACCESS,就可以在控制台中看到是哪个对象被释放掉了. 另外要避免频繁的出现上述问题,下面是一些建议: 1. 当引用了别人传递进来的对象时,最好retain一下,避免在别人那里已经把 ...
- BZOJ 2844 albus就是要第一个出场(高斯消元)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2844 题意: 给出一个长度为n的正整数数列A.每次选出A的一个子集进行抑或(空集抑或值为 ...