Coco2,cocos2d官网
cocos2d引擎2.0 cocos2d介绍cocos2d最初的版本是用python写的,后来改成了objectiveC,应用在iphone上。之后国内有人按照这个设计理念改成了C版cocos2dX,可以在iphone,widnows,Andriod三个平台上运行。最新版本是1.0.0,这个引擎C的版本还引入了lua脚本系统。cocos2d是一个完全开源的引擎,开发者可以在不开源的情况下随意使用代码。cocos2d应用广泛,包括Zynga、南宫梦等知名游戏公司。Cocos2d不仅是一个2d图形引擎库,他还提供了一些支持游戏逻辑的系统。cocos2d提供了一个简单的声音引擎,支持播放mp3、wave、ogg等文件格式的音乐。cocos2d可以配合物理引擎box2d使用,实现碰撞等物理效果。cocos2d引擎有清晰的结构,丰富的文档和例子。易学易用。
2.1 Cocos2d的基本结构Cocos2d使用场景树结构来管理游戏对象,将一个游戏划分为不同的场景。场景可以分为不同的层,一层可以有任何可见的游戏对象。游戏对象可以执行动作来修改它们的属性。每时每刻,一个场景独立运行。通过切换不同场景来完成一个游戏过程。cocos2d也使用引用计数来管理内存。基本上所有的类都是用引用计数机制从CCObject派生出来的。其基本框架类图如下:
A.CApplication,负责平台相关的初始化,消息处理等。是一个单例类。
B.CCDirector,主要职责是管理场景和切换场景,暂停游戏等。此外,他还负责初始化一些与openes相关的东西。它也是一个单例类。
C.节点类CCNode是游戏中最重要的对象。在cocos2dk中,任何可见或不可能的游戏逻辑对象都是一个节点,它具有以下特征:
a)是一个可以包含任意数量的其他节点的容器。
b)您可以执行一项操作(CCAction)
c)可以执行某个任务的回调。
d)有坐标转换的信息,如位置、比例、旋转等。
e)由于一个节点可以添加任意一个子节点,所有节点形成一个树形结构,父节点的坐标变换会影响子节点在世界坐标系中的坐标,一个节点只能有一个父节点。
D.CCAction,Action类,CCAction和分配给CCNode的命令一样,修改CCNode的属性,比如位置,旋转,缩放等。在特定时间内(或立即)
E.CCScene,场景类,类似于PL中的stage。游戏场景一般是指在某一时刻可以独立运行的部分,包括可见的怪物、地形和不可见的逻辑脚本等。例如游戏的特定级别、游戏菜单、过场动画等。都是独立场景。cocos2d中的场景由不同的层组成(CCLayer)。因为CCScene是CCNode的子类,所以它可以是
F.CCLayer类,场景中的图层类。一个场景可以有多个层,比如HUD层、游戏对象层、背景层、天空层等。层是可以绘制的区域。你可以添加用户界面,精灵和其他对象。此外,该层还接收输入消息,这些消息可以在layer类中进行处理。和CCScene一样,CClayer是CCNode的子类,也可以是
2.2资源管理和文件系统资源管理可以分为两个方面。一个是管理一些原始资源,比如模型、地图、脚本、字体等。另一个资源是游戏运行时分配的游戏对象。需要快速访问它们。一般来说,没有被引用的游戏对象是不会马上发布的。它将首先被缓存在某个地方。只有当一个新的场景被加载时,它才会被释放。在一些大型渲染系统中,资源会分为三个阶段,硬盘、内存和显存资源,分别采用不同的策略和缓存机制进行管理。cocos2d并没有明显的提出资源管理的概念,而是使用了一些缓存机制来缓存加载的纹理、帧、动画等。cocos2d还为运行时分配的游戏对象提供了自动释放机制,当游戏场景切换时,自动释放对象的内存将被回收。因为cocos2d采用了引用计数机制,所以循环引用是一个需要注意的问题。
对于文件系统,cocos2d封装了一个简单的类CCFileUtils,不仅可以读取普通文件,还可以从zip文件中读取文件。这个类还读取plist文件来生成一个CCDictionary对象。
2.3 Sprite和渲染系统Cocos2d sprite由Texure、frame和animation组成,openes负责渲染。主要的类关系如下:
A.Sprite可以看作是某个时刻2d画面的剪辑部分。
b .框架由纹理和矩形(四边形)组成
C.texture表示可以绘制的二维纹理。
D.imgae对应硬盘中不同类型的图片,如jpg、png、tga等。它知道如何从文件中读取不同类型的图片,并为纹理使用生成缓冲数据。
E.动画由一系列帧组成,类似于电影的胶片集合。
F.CCAnimate,动画动作,在指定时间内在sprite上播放指定动画(CCAnimation)。
2.3.1纹理与图像中的cctexture 2d cocos 2d用于描述一个2d纹理,它知道如何在屏幕上绘制自己。纹理过滤、抗锯齿等参数也可以通过这个类来设置。这个类也提供了一个接口来创建一个字符串到纹理中。这个类包含的纹理大小必须是2 N,因此,纹理的大小不一定等于图片的大小。CCTexture2D以下成员:
A.name,指向视频内存中纹理的地址。
B.pixelFormat,描述纹理的格式,如RGBA888或RGB565等。
c .像素宽度、像素高度、纹理的宽度和高度
D.maxS,maxT,纹理的最大坐标
现在我们有了CCTexture2D这样的类纹理的渲染,我们还需要Imgae类做什么呢?因为图片在不同的平台上有各种各样的格式,不同的格式,不同的加载方式,cocos2d用一个CCImage类来封装不同平台上不同格式图片的加载。如果CCImage中的缓冲区对应的是内部资源,那么CCTexture2D对应的缓冲区就是内存资源。
2.3.2帧和动画如上所述,帧保存了一个纹理和矩形。在cocos2d中,通常会给frame起一个名字,以字典的形式保存在CCSpriteFrameCache中,方便随时阅读。CCSpriteFrameCache支持从plist(类似xml)文件中读取图片。根据文件生成一系列帧,并给文件加上一个名称。每帧的plist可以使用很多第三方工具生成,比如ZW Optex(http://zwopexapp.com/)、texture packer(3358 code-and-web . de/texture packer);
CCAnimation类用于实现CCspreite对象上的动画。它节省了帧间的一系列延迟。和框架。您可以使用CCAnimationaction在sprite上播放动画。
2.3.3渲染过程由于cocos2d只处理2d图形,所以渲染采用固定流水线方式。到时候一些高级的特效也可以直接用openes的功能来完成。与渲染相关的类有cctexutre2d,cctexutretlas,ccsprite,ccrendertexture,CCRenderTexture支持渲染数据到纹理。另外,CCNode是一个相机类,但一般不用。只有在实现一些3D特效的时候,才会用到相机的一些功能。
2.4粒子系统Cocos2d支持两种类型的粒子系统,即点粒子系统(CCParticleSystemPoint)和方形粒子系统(CCParticleQuadSsytem),方形类型系统支持一些附加功能。
A.它可以旋转
B.它可以是任何大小,而点的大小不能超过64
C.四边形类型的粒子系统可以作为一个整体进行缩放。
D.四粒子系统比点粒子系统消耗更多的内存和视频内存。
Particle system还支持从plist文件中读取数据,plist文件可以由第三方工具生成,如particle designer(http://particledesigner.71squared.com/)和ParticleMint。
2.5 ui和字体Cocos2d只有一个简单的ui实现,支持按钮、标签和切换三种类型的ui,还支持一个简单的文本输入框(TextField)。类图如下:
A.CCMenu派生自CClayer,可以处理输入消息。CCMenu包含多个CCMenuItem对象。接收到输入消息后,根据触摸位置将输入消息分配给相应的菜单项,并执行回调函数。
B.CCMenu还提供了对齐菜单项的界面。
C.CCMenuItem菜单项的基类。目前cocos2d仅从ccmenuitem派生出ccmenuitemlabel、ccmenuitemsprite和ccmenutoogle。当然,也可以派生新的类来实现其他菜单项,比如checkbox。
Cocos2d支持两种字体,一种是平台相关的TTF字体,一种是平台无关的art字体。这类字体可以用字体编辑器(例如http://glyph designer . 71 squared . com/)定义,类似于sprite,使用起来很方便。
2.6简单TileMap Cocos2d支持TMX(TileMap XML)格式的地图,可由tile mapeditor(http://www . map editor . org/)生成。TMX地图具有以下特点
A.支持正交,六边形和45度等轴测地图。
B.支持对象组、对象和属性
与地图相关的类别如下:
A.上面的类图是简化的,实现的类还包括objectgroup、property、tilesetinfo等。
B.平铺地图有多个图层
C.一个层有多个图块(由sprite表示)
D.因为每个图块都被视为一个sprite对象,所以每个图块都可以独立地移动、旋转、缩放甚至操作。
E.layer保存tileid对应的二维数组,只在需要的时候根据tile id创建对应的tile(sprite),这样可以节省存储空间,提高渲染效率。
F.可以在运行时添加和删除图块。
g . http://www.cocos2d-iphone.org/wiki/doku.php/prog _ guide:tiled _ maps网页上有tileMap使用的详细教程。
2.7对游戏逻辑的支持如前所述,Cocos2d不仅是一个2d渲染引擎,还提供了一个支持游戏逻辑的系统。首先,所有可见的物体、场景和图层都保存在场景树的数据结构中,对root(通常是场景)进行的操作都会影响root的子节点。如果根被缩放或平移,那么根的所有子节点也将被缩放和平移。所有的节点类(CCNode)都继承了一个接口SelectorProtocol,这个接口有一系列的回调函数,在特定的条件下可以回调完成相应的逻辑处理。最基本也是最重要的一个,就是与日程相关的回调接口。下面将介绍调度任务系统。
2.7.0调度系统Schedule system也叫任务系统或事件系统,任务是指在一个时间片内有规律地发生的事件。cocos2d中的CCNode可以命令一个预定的任务,通过回调函数完成一个特定的逻辑。相关的类图如下
A.CCSchedule可以将selectorProtocol接口对象添加到任务列表中。
B.CCTimer检查每帧中对应的任务是否到达执行时间点,如果是,则执行回调函数。
C.CCNode派生自SelecotrProtocol,根据需要通过重载实现回调函数,实现相应的逻辑。
2.7.1动作简介动作就像一些可以执行的命令。通常,一个动作会修改一个CCNode对象的一些属性,使其执行一些动作,比如改变其位置,方向,使Sprite播放动画等。如果这个动作在一定时间内完成,我们称之为IntervalAction,如果立即执行,我们称之为Instantiation。例如,CCMoveBy在一定时间内将CCNode对象移动一定距离。因此,它是间隔的一个子类。CCCallFunc立即实现一个框架回调函数。因此,它是实例化的子类。
动作的设计采用组合模式和decorator模式,可以将一系列动作组合起来,让CCNodec对象执行,就像给CCNode下一系列命令一样。例如,下面的代码
CCActionInterval * move=CCMoveBy:actionWithDuration(0.5f,ccp(0,160));
CCActionInterval * rotate=CCRotateBy:actionWithDuration(2,360);
CCActionInterval * scale=CCScaleBy:actionWithDuration(2,5);
CCActionInterval * opacity=CCFadeOut:actionWithDuration(2);
CCActionInterval * fade in=CCFadeIn:actionWithDuration(2);
CCActionInterval * scale back=CCScaleTo:actionWithDuration(1,1);
CCFiniteTimeAction * seq 0=cc sequence:actions(移动、旋转、缩放、不透明度、淡入、缩放、空);
actor-run action(seq 0);
该代码解释如下:
A.演员在0.5秒内沿Y方向移动160个单位,
B.让演员在2秒内旋转360度。
C.在2秒钟内将演员2放大5倍。
D.2秒后淡出
E.在2秒内淡入。
F.在1秒钟内缩放至原始尺寸
2.8网络支持Cocos2d不提供专门的网络库。
2.9脚本支持最新版本的Cocos2dX提供了lua脚本支持,在1.1.0版本中结合了tolua,基本上是将所有的类成员函数导出到脚本中。另外增加了一些脚本回调函数,比如菜单的消息处理可以通过执行一个脚本来完成。您还可以添加计划任务来回调脚本函数。虽然cocos2d中有一个简单的例子来说明如何使用lua,但是具体效率还是比较低的。
2.10声音引擎支持Cocos2d采用简单的声音引擎,支持Wav、mp3、ogg、caf格式音频文件播放。但是,引擎不提供音量设置。
2.11物理引擎支持Cocos2d可与box2d和chipmunk物理引擎结合,模拟碰撞、重力等物理效果。在代码示例中,有大量结合了Box2D和花栗鼠的示例,可以用来学习和研究。
2.12 cocos 2d的缺点Cocs2d不仅处理2D渲染,还将整个渲染系统与游戏逻辑紧密耦合。所以在使用coco2d渲染的时候,你得用他的整个逻辑相关代码。所以在使用其渲染库的同时,很难自己设计一个逻辑框架。对于一些小游戏,可以用来快速迭代开发。但对于一些大型游戏,为了让系统运行更稳定,结构更清晰,更容易扩展,一般会将所有模块分开,方便不同人员的开发和维护。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。