Cocos2d-iphone 开发之(3) 了解Cocos2d核心类

cocos2d中最常用的类可以大致分为两部分——实体类和行为类,所谓实体类就是非常容易具体化,我们能够直观的感受到的东西,比如桌子、图片、人,这些是现实中实际存在的,实体类可以说就是对这些东西的模拟,当然也有稍微抽象一些的,比如菜单、按钮,但不管怎么说我们都很好理解它们的存在;行为类相比之下就显得很抽象了,它们封装的主体并不是某一事物(或者说是属性),而是方法,就是该类的实例表示的是实体类的一种行为模式,不同的行为模式需要不同的类来封装。从语文的角度讲,实体类就是主语(谁),行为类就是谓语(做什么),cocos2d大部分时间都是在围绕这两者工作。

cocos2d中的类采用的是树状继承的方式,即最上层的基类只有几个,拓展功能都是通过一层层的继承父类来实现的,这样做便于类于类之间的协作,因为很多接口都是共通的(都来自于基类)。实体类的基类是CCNode(cocos2d的所有类都以CC开头),它是所有实体类的父类,它内部封装的参数与方法是整个引擎中出镜率最高的,可以说是cocos2d的核心(菜单、精灵都是继承自它)


上图就是一张节点层级图了。


节点层级图是有所有目前活跃的Cocos2D 节点组成的一个层级图,又称场景继承关系图,除了场景本身,其他节点只有一个父节点,但是可以有任意个子节点;将节点添加到其他节点中时,就在构建节点场景图了。


如果一个游戏可以正常运行,那么顶层一定是一个场景Scene,接着就是层Layer,Layer的下一层的节点才是游戏中的主要元素,他们大多是精灵sprite。


节点层级的作用在于,对某个节点施加的影响将会影响到他所有的子节点。


例如,当节点执行了一个set开头的方法(即赋值方法)或某种行为时,产生的效果并不仅限于该节点,也包括它的所有子节点,以开头的示例图为例,当节点1执行了setPosition方法后,节点1、2、3、4、5、6都会发生位移,但如果是节点2执行的setPosition,那么只有节点2、4、5会移动,节点1、3、6不会受影响。善用这点的话会使开发更加省力,反之则会给自己增添不少麻烦,所以在设计树的结构时需要动些脑筋(当然作者认为这样还是利大于弊的)。


行为类则大部分继承自CCAtion,它的子类实例可以让一个CCNode对象执行一个行为,比如旋转、移动,甚至是自定义的行为,一个CCNode可以同时执行多个行为或是按顺序执行一个行为序列,有了这些类,开发者就可以在游戏中轻松加入各种华丽的效果了。


有了CCNode和CCAction,我们是不是就可以开发游戏了呢?还不行,我们还需要一个乘纳它们的舞台。比如我们创建一张图片,并赋予它一个移动的行为,但是我们无法看见它,因为我们并没有把它显示到屏幕上,而舞台的作用就是把它上面的演员显示到屏幕上,呈现给观众。cocos2d实现舞台的方式是这样的:


舞台分为三部分:导演–场景–层。首先,屏幕的显示是以场景为单位的,我们通过显示器看到的所有内容都在一个场景中,而层是构成场景的元素,就好比场景是一个舞台,我们通过它观看游戏中的世界,而层就是组成舞台的各种背景,比如远近、近景、字幕。当一段故事讲完后,我们可能需要切换到另一个舞台来讲述下一段故事,在戏剧中通常是拉上大幕,在幕后切换背景,然后再拉开大幕,在cocos2d中也是这个步骤,而完成这一工作的就是导演。导演类负责场景间的切换,场景负责将游戏中的元素呈现给玩家,而层负责容纳元素以及接收玩家的输入信息。


下面再介绍一些基本的概念:

什么是锚点?

锚点的默认位置是在纹理图像的几何中心位置。

通常对节点的设置的position位置属性是相对于锚点来说的,所以当在设置节点位置的时候,节点中心的位置就是所设置的坐标位置。

当然你也可以修改锚点的位置,范围从(0,0)到(1,1)


在cocos2d,每个初始化方法都分别踢狗了实例方法和类方法,其实,类方法是调用了实例方法来初始化对象,并创建一个自动释放内存的对象。对于开发者来说,一般情况下直接使用类方法来创建对象就可以了,这里其实就是工厂方法模式。



CCNode 结点类

作用主要有:

①添加add  去除remove 子节点

②通过定时器预定消息(schedule   unschedule等)

③执行动作(runAction,stopAction等)


注意默认CCNode结点的锚点值是(0,0),也即是在结点的左下角

可以用 _cmd 关键字停止当前方法的预定

在初始化节点的时候是采用预分配对象的策略(lazy loading),即在初始化方法中就尽量把游戏场景中用到的sprite,label,menu等对象创建好,如果不想立即显示,就把那些节点的visible属性设置为NO ,这种做法有助于提高游戏的性能。


CCScene场景类

它是CCNode的子类,也是一个抽象类。事实上,CCScene和CCNode几乎完全相同,唯一的差异在于:CCScene的锚点默认位置在屏幕的几何中心。

CCScene类基本上没有附加任何逻辑机制和特殊功能,通常构建CCScene作为其他所有节点的父结点,看做是CCLayer对象的容器。

如果要实现各种场景的切换,通常来说如视图跳转,都必须基于CCScene的场景切换

CCTransitionScene 场景切换  支持场景过渡效果

CCLayer层类

它是屏幕上可绘制的区域,作为精灵节点和其他节点的容器,他同时可以接受触摸输入和加速计输入的信息。

CCLayerColor 色彩层  :可以设置填充颜色的层

CCLayerGradient 渐变色层


CCMenu 菜单类 :继承自CCLayer,是一个菜单管理选择的画面层,该画面以menu对象为集合类,由MenuItem类实例组成。

CCMenuItem类实例组成各种按钮,同时CCMenu 只支持CCMenuItem节点作为他的子节点

注意:CCMenuItem是基础类,不能直接用来创建菜单,他的作用主要是用来设置按钮的状态以及处理回调方法。需要使用CCMenuItem的子类来创建定制菜单项。

CCMenuItem的子类有:

CCMenuItemLabel

CCMenuItemAtlasFont

CCMenuItemFont

CCMenuItemSprite

CCMenuItemImage

CCMenuItemToggle


CCTexture 纹理类

游戏运行过程中,所有的图像文件都被加载为GPU[英文全称Graphic Processing Unit,中文翻译为“图形处理器”]可以理解的OpenGL ES 纹理。

Cocos2d内置一个纹理缓存管理器(CCTextureCache)来保存这些纹理图

注意,图像填充到纹理中时,其长度和宽度都必须是2的N次方。

CCTexture(纹理)

CCTextureAtlas(纹理图集):纹理图集只是一个大的纹理图而已,他包含所有的图像。

CCTextureCache(纹理缓存):作为单例使用,用于加载和管理纹理


CCSprite精灵类

一般,精灵来自图像,一旦图像载入内存中,就会将精灵转换成纹理图

CCSpriteBatchNode 精灵表单,其中包含的CCSprite

CCSpriteFrame 精灵帧

CCSpriteFrameCache精灵帧缓存(单例),其中包含的是CCSpriteFrame


CCDirector导演类

单例,用于保存cocos2d的全局配置设定,同时管理cocos2d场景

以上部分内容参考http://www.xuanyusong.com/archives/category/ios/cocos2d_game

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值