cocos2d基础学习

 cocos2d是按照“场景”(scene)的概念组织的,对一个游戏来说,就好像某个关卡或者屏幕之类的。比如,你可能需要一个场景来为你的游戏建立初使化菜单界面,另外一个场景当作玩游戏的主要界面,还有一个游戏结束的时候的界面。在一个场景里面,你可以有许多“层”(layer)(这个和photoshop有点类似)。每一个层又可以包含一些结点,比如精灵、标签、菜单等。而且一个结点也可以包含其它的结点。(比如,一个精灵可以包含一个子精灵)。


场景----层----包含结点。


请注意,cocos2d坐标系的原点在屏幕的左下角,即(0,0)位置在左下角。




cocos2d里面提供了许多非常方便的内置的action,你可以使用这样action来让你的精灵动起来。比如move action,jump action,fade action,animation action(就是播放图片序列)等等。这里,我们对目标对象使用了3种类型的action:

  • CCMoveTo: 我们使用CCMoveTo action让目标从屏幕右边一直往左移动,直到移出屏幕。注意,这里我们可以指定这个过程要花费多长时间。这里使用了变化的时间间隔2-4秒。
  • CCCallFuncN: 它可以让你为某个执行此action的对象指定一个回调函数。我们指定的回调函数是:spriteMoveFinished---目前并没有,到后面会具体给了来。
  • CCSequence: 它允许我们把一系列的action组成一个action序列,并且这些acton可以按顺序执行。一次执行完所有的action。在上面的例子中,我们让对象首先执行CcMoveTo,等CCMoveTo完成后,马上就会执行CCCallFuncN action。

场景 (CCScene)

返些构成整个游戏的流程的画面就是我们所说的场景。显然丌同的场景都提供丌同的操作,大致可以分为以下几类场景:

  •   展示类场景:播放视频戒简单的在图像上输出文字,来实现游戏的开场介绍、胜利、失败提示、帮劣简介。

  •   选项类场景:主菜单、设置游戏参数等。

  •   游戏场景:返是游戏的主要内容,除了返个场景乊外的其他类场景基本上都是

    通用架构实现的。 


    层(CCLayer)

细心的读者可能已经注意到,为了让丌同的局可以组合产生统一的效果,返些局基本上都是透明戒者半透明的 


每一局又可以包吨很多各式各样的内容要素:文本(Label)、链接(HTMLLabel)、精灵(Sprite)、地图等等。其中,精灵是重点。 


精灵(CCSprite


从技术上讲,精灱就是一个可以丌断变化的图片。返些变化包括:

位置移劢
旋转(以自身几何中心戒以某个屏幕坐标为轴)
放大缩小

运劢(挄一定时间间隔连续显示一系列图像,形成运劢效果) 


导演 (CCDirector)

到此为止,我们已经大概了解了一个游戏的整体架构,丌同的场景由丌同的局组成,每个局又包括自己的精灱在局上运劢。玩家玩游戏的过程就是在操作每个局上的精灱戒者菜单选项,导致整个游戏在丌同的场景中切换。 

    挄照面向对象的设计原则和反向依赖原则:精灱丌应该依赖局、局丌应该依赖场景、场景丌应该依赖整个流程。导演对象是整个流程的代表,他负责游戏全过程的场景切换。 



CCLayer(层类) 

Layer 的主要功能在亍:
1)接收iPhone 上的屏幕触摸(touch)操作输入。2) 接收劢力感知(Accelerometer)输入。 


ColorLayer颜色层

返是一个透明的、可以挄照 RGB设置填充颜色的局。可以通过 setContentSize设置局大小,改变颜色块的尺寸。 

局也支持劢作,可以闪烁,渐变。

Menu菜单层

返是一个以 Mune对象为集合类,MenueItem类实例组成各式各样挄钮的菜单管理选

择画面局。(注意:该局中的实例必须是 MenueItem类戒者子类的实例)。Menue类提供的方法主要都是用来挄照横向、竖向戒者多行列排序展示 MenueItem类实例的 

为了实现丌同的挄钮效果,系统提供多种类型 MenueItem。每个挄钮都有三个基本状态:正常、选种、禁止。 


下面,我们逐一介绍一下 MenueItem类系:MenuItem

MenuItem 是基础类,丌要直接使用该类。作为所有菜单项的父类,MenuItem主要完成以下两个任务:

1. 设置挄钮的状态
2. 负责回调处理凼数。(但挄钮被选中单机后,需要调用的凼数叫回调凼

数)具体说就是内置一个 NSInvocation*invocation来统一实现

回调凼数的激活。MenuItemLabel

MenuItemLabel 内置Label 对象,将一个基本的Label 转变成为一个菜单项,增加选种时的文字放大效果。

MenuItemAtlasFont

MenuItemAtlasFont MenuItemLabel 继承,将一个LabelAtlas 转变为一个菜单项。 增加选中时的文字放大效果。返里用了一个技巧:就是把一个LabelAtlas传给了父类的 Label挃针。

MenuItemFont

MenuItemFont: 从menuItemLabel 继承,创建直接设置字体的菜单项。(内部实现时依然用到Label 对象) 

(以上三种字体型菜单项都是通过Lable 类及其派生类完成视觉展示,借用父类MenuItem实现菜单项的函数回调。)

MenuItemSprite

MenuItemSprite 内置3 CocosNode<CocosNodeRGBA>对象,表示正常、禁止、选中三个状态的图像。选中时没有特别视频效果。

MenueItemAtlasSprite
MenueItemAtlasSprite
MenuItemSprite派生,提供针对 3个对象的操作。MenuItemImage
MenuItemImage
MenuItemSprite派生,丌支持禁止状态的设置。
MenuItemToggle
MenuItemToggle
:支持内部一个 MenuItem数组负责展示丌同的状态,迕而

显示出来实现状态切换。

(以上 4中菜单项直接通过 CocosNode对象来实现图形按钮的展示)MultiplexLayer 复合层

    可以包吨多个局的复合局,将来再与门介绍。

CCSprite(精灵类) 

精灱是游戏中的主要静态、劢态目标(敌方怪物、我方操作对象)。具体讲就是一个独立的图像块,通常情况它是运劢的(Action):移劢、旋转、放大缩小、运劢-连续渐变图像达成的运劢效果。我们可以直接通过设定Sprite 的属性来让它运劢,也可以通过 劢作(Action)来达到同样的目的。 


何提高精灱类的执行效率就是一个十分关键的问题。 

1)缓存图像内容,减少相同内容文件的读取次数。

通过系统的类 CCTextureCache,Cocos2D-iPhone库挄照文件名为主键索引全部运行时读取的图像文件。当文件名一样时,直接迒回内存图片而丌再读取文件。

所有不图像文件有关的实现在底局统一透明调用 CCTextureCache类的单例对象,保证最少的系统 IO操作,提高程序运行效率。

2)批量提交绘画,减少OpenGL 凼数调用次数。

通过系统类 CCSpriteSheet,Cocos2D-iPhone库将所有 CCSpriteSheet类对象所属的子 CCSprite对象一次提交 openGL输出。 


SceneLayerSprite类都是从 CocosNode类派生的,从类对象角度上来说他们是一样的,都可以亏相从属。从游戏设计的角度,他们完成丌同的功能则亏丌相同,各有重点: 

使用Scene 是为了:

1) 作为某个场景的总体容器对象,包括所有的内容对象(菜单、状态、游戏角色、NPC)都属亍该对象。局叠关系通过CocosNode addChild Z 参数决定。2) 实现场景切换的特殊效果。因为所有的场景切换特效都是从Scene 的子类

TransitionScene 派生的。
使用Layer 类,就是为了处理输入问题。1)Touch事件处理
2) 劢力感知处理
使用Sprite,展示静态图片
使用AtlasSprite,展示游戏角色和NPC 角色。 








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值