大家好,我是MOMO的朋友失落的宇宙,以后由我负责更新cocos2d的文章,这是我第一次写开发教程,不足之处还请各位多多担待,并随时欢迎指正,希望我们能够共同进步~
在正式介绍cocos2d之前,我先啰嗦一下本人对这套引擎的看法。我认为coos2d最大的作用就是降低开发成本(貌似所有引擎都是这样= =),对于研发部门来说,最大的成本就是时间,所以节省时间是降低成本最有效的方式,cocos2d几乎封装了所有开发ios游戏需要的底层代码,使刚刚接触OC的开发者也能很快的制作出效果不错的游戏。可以这样说,只要你掌握了OC的基本语法以及Foundation框架的常用API,就可以用cocos2d开发游戏了,因为很多东西它都帮你完成了,不需要你花过多的精力去学习API的使用。同时cocos2d还是完全免费的,这一点使它在ios平台上的实用性超过了Unity3d,Unity3d虽然功能强大,但绝对称得上是“烧钱神器”。
废话就说到这,咱们说正题,上一章MOMO介绍了cocos2d的下载与安装,那么现在我来说一下cocos2d项目的结构。新建的cocos2d项目最外层有3个目录,分别存放代码、类库和app包。
代码目录的结构如下图所示:
最上面的几个是开发者自己编写的类,当然图中是一个新建的项目,所有类都是引擎自动写好的。Resources目录用来存放资源,libs中是cocos2d的源代码,Supporting Files中是入口函数(main)。
Libs路径结构,其中cocos2d的逻辑代码都存放在cocos2d路径中(已用红框标记)。
Supporting Files路径,入口类就放在这里(实际开发中基本不需要过问)。
Frameworks路径,其中最常用的就是Foundation.framework了。
读者们可能已经发现,cocos2d的源码是开放的,这有利于我们研究它的内部结构,从而加深理解,但作者建议不要去修改源代码,因为cocos2d是一个标准,是完全公开的,就是说所有cocos2d项目中的libs应该是完全一致的,如果修改了,引擎就会失去兼容性,在这个项目能够正常运行的代码到了另一个项目就会报错,如果API是这种效果的话,我想任何一个开发者都会抓狂吧(J2ME就是一个很好的例子,由于硬件和API实现方法的差异,导致相同的代码在不同的手机上差异性很大),所以我们在开发时最好把它看成一个SDK,只要使用它的API就好。
好吧,貌似又说了一堆和引擎的研究无关的东西,接下来我真的要将引擎的实际应用了= =(其实作者之所以在一开始说这么多,并不是想凑字数,而是因为这些才是对开发者来说最重要的,如果一个程序员连基本的开发规范都不知道,那他即使有再好的引擎,甚至精通各种语言,也绝不可能写出高质量的代码,理由很简单,南辕北辙只会使你离目的地越来越远,但如果方向正确,即使是乌龟也有超过兔子的可能)
在作者看来,cocos2d中最常用的类可以大致分为两部分——实体类和行为类,所谓实体类就是非常容易具体化,我们能够直观的感受到的东西,比如桌子、图片、人,这些是现实中实际存在的,实体类可以说就是对这些东西的模拟,当然也有稍微抽象一些的,比如菜单、按钮,但不管怎么说我们都很好理解它们的存在;行为类相比之下就显得很抽象了,它们封装的主体并不是某一事物(或者说是属性),而是方法,就是该类的实例表示的是实体类的一种行为模式,不同的行为模式需要不同的类来封装。从语文的角度讲,实体类就是主语(谁),行为类就是谓语(做什么),根据作者的开发经验,cocos2d大部分时间都是在围绕这两者工作。
cocos2d中的类采用的是树状继承的方式,即最上层的基类只有几个,拓展功能都是通过一层层的继承父类来实现的,这样做便于类于类之间的协作,因为很多接口都是共通的(都来自于基类)。实体类的基类是CCNode(cocos2d的所有类都以CC开头,这就表示你完全可以54它的存在= =b),它是所有实体类的父类,它内部封装的参数与方法是整个引擎中出镜率最高的,可以说是cocos2d的核心(菜单、精灵都是继承自它),下一章节会对它进行详细介绍。
行为类则大部分继承自CCAtion,它的子类实例可以让一个CCNode对象执行一个行为,比如旋转、移动,甚至是自定义的行为,一个CCNode可以同时执行多个行为或是按顺序执行一个行为序列,有了这些类,开发者就可以在游戏中轻松加入各种华丽的效果了。
有了CCNode和CCAction,我们是不是就可以开发游戏了呢?还不行,我们还需要一个乘纳它们的舞台。比如我们创建一张图片,并赋予它一个移动的行为,但是我们无法看见它,因为我们并没有把它显示到屏幕上,而舞台的作用就是把它上面的演员显示到屏幕上,呈现给观众。cocos2d实现舞台的方式是这样的:
舞台分为三部分:导演–场景–层。首先,屏幕的显示是以场景为单位的,我们通过显示器看到的所有内容都在一个场景中,而层是构成场景的元素,就好比场景是一个舞台,我们通过它观看游戏中的世界,而层就是组成舞台的各种背景,比如远近、近景、字幕。当一段故事讲完后,我们可能需要切换到另一个舞台来讲述下一段故事,在戏剧中通常是拉上大幕,在幕后切换背景,然后再拉开大幕,在cocos2d中也是这个步骤,而完成这一工作的就是导演。导演类负责场景间的切换,场景负责将游戏中的元素呈现给玩家,而层负责容纳元素以及接收玩家的输入信息。
通过这些类的合作,我们就可以进入自己创造的游戏世界了~
- 本文固定链接: https://www.xuanyusong.com/archives/895
- 转载请注明: 失落的宇宙 于 雨松MOMO程序研究院 发表
同学你知不知道,赵武和赵武灵王
无意溜达到了你的网站 留下足迹
i discover this…
kattunge i hemmet?…
大侠,我来了很多次,当初的android游戏就是学习你的那些教材,现在又想学学cocos2dx了,哈哈,谢谢呀,哪天去了北京,请你吃饭。
感谢哈
OK。。
阅
总结的很不错,看完之后对使用该引擎开发游戏的结构很清晰。赞一个~~
凯哥的功劳 蛤蛤
不错
宇宙 人气很旺,支持一下!
支持一下……虽然看不懂
谢谢支持
拍爪支持野生宙叔。
话说对电脑编程一窍不通,只能深深仰望趴在树上身为程序猿的宇宙~
那个,话说再两年宇宙就会发大火球了吧……
我现在就想发= =
加油
谢谢~
前来学习,期待下一篇文章。希望能在写点代码的东西。
下一篇就会开始讲解代码了,之前算是预热,因为我觉得对整体的认识会使我们的工作事半功倍,希望你能继续关注~
板凳自己坐
weikaixiong的处女座,