原创文章如需转载请注明:转载自雨松MOMO程序研究院本文链接地址:Cocos2D研究院之初识Cocos2d(二)

大家好,我是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://my.oschina.net/wearex/blog/89030

cocos2d 浅析相关推荐

  1. 手游安全之cocos2d-x的源码浅析(手游逆向与防护)

    一.cocos2d-x框架结构 二.cocos2d-x引擎架构 三.cocos2d-x源码结构 四.cocos2d-x源码解析 1.luaLoadBuffer函数分析 cocos2d-x-3.16/c ...

  2. 浅析 JavaScript 中的 函数 uncurrying 反柯里化

    柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...

  3. 浅析Python中bytes和str区别

    本博转载自:Chown-Jane-Y的浅析Python3中的bytes和str类型 Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示, ...

  4. 学习《Linux设备模型浅析之设备篇》笔记(深挖一)

    这篇文章既然说了是浅析,那就是跳过了一些东西,我们把这些跳过的东西给它尽可能的补回来 今天登陆 lxr.free-electrons.com 发现内核版本已经升级到3.15了,那以后都使用3.15的源 ...

  5. 学习《Linux设备模型浅析之设备篇》笔记(一)

    最近在学习Linux设备模型,前面几篇文章也是读这篇的时候遇到问题,然后为了搞清楚先转去摸索才写出来的. 当然了,刚开始是先读到<Linux那些事儿之我是Sysfs>,搞不清楚才去读的&l ...

  6. Improve Performance and Reduce Memory with PVRTC Textures and Cocos2d

    转载自:http://www.uchidacoonga.com/2011/07/pvrtc-textures-and-cocos2d/ Hello everyone! A few months hav ...

  7. 【Cocos2d开发】Cocos2d下安卓环境的搭建

    在进行Cocos2d游戏开发前 我们先来配置一下环境,我们先来准备一下工具,我们所需要的工具分别为: 1.Cocos2d引擎 2.JDK 3.SDK 4.NDK 5.ANT 6.ADT 1.下载Coc ...

  8. 架构周报| 浅析MySQL JDBC连接配置上的两个误区

    经典案例 \\ 浅析MySQL JDBC连接配置上的两个误区:相信使用MySQL的同学都配置过它的JDBC驱动,多数人会直接从哪里贴一段URL过来,然后稍作修改就上去了,对应的连接池配置也是一样的,很 ...

  9. cocos2d 从v1.x升级到v2.x需要注意的几个地方

    首先v1.x一些CCNode定位函数实现的有问题,导致返回的CCPoint的x坐标不正确(超出320后无变化),怀疑是其对屏幕旋转判断的不正确;而且这种现象在iOS 7.1之前的模拟器中运行都正常,在 ...

  10. 超级账本(Hyperledger Fabric)之权限管理浅析

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 超级账本(Hyperledger Fabric)之权限管理浅析 超级账本是联盟链的代表,而其相对于共链(例如比特币,以太 ...

最新文章

  1. ABP官方文档翻译 0.0 ABP官方文档翻译目录
  2. spring boot 整合redis实现方法缓存
  3. Confluence 6 为空白空间编辑默认主页
  4. ListView的性能优化之convertView和viewHolder
  5. 台大李宏毅Machine Learning 2017Fall学习笔记 (6)Logistic Regression
  6. 2022年考研数据结构_4 串
  7. 不吼不叫:该如何平静地和孩子合作?
  8. Android 首次开机优化
  9. 【实用工具】一键在线抠图、一键在线更换图片背景、一键更换证件照片背景颜色的神奇AI网站 RemoveBg
  10. (UML)统一建模语言简介(关系详解)
  11. 软件测试面试注意事项汇总
  12. 人生四大铁:一起同过窗,一起扛过枪,一起嫖过娼,一起分过赃。
  13. Netty4 学习笔记之三-粘包和拆包
  14. Handler简单介绍
  15. 卸甲归田——回顾CSP2019
  16. android4.1动态壁纸,Android 4.1 设置默认开机动态壁纸
  17. 贴片电阻电容的封装形式及尺寸
  18. UKF VS EKF
  19. java execution_java – 关于运行时不能与’RequiredExecutionE...
  20. mtrace内存泄漏工具的使用方法

热门文章

  1. PeopleRank从社交网络中发现个体价值
  2. 【架构解密】第六章 深入解析分布式存储
  3. vue package.json 解析
  4. webapi 给自己挖的坑
  5. JDK的KeyTool和KeyStore等加密相关
  6. C# 不借助第三个变量实现两整数交换
  7. initwithcoder和 initwithframe 区别?
  8. Linux入门-网络实验3.3
  9. Hdu 1303 Doubles
  10. silverlight 地图轨迹回放