最早,在没有高级语言的时候,为计算机开发软件是一个很麻烦的事情。开发人员既要关注软件本身的功能流程,也需要关心计算机底层的操作。高级语言和各种编程框架的出现将开发人员从繁杂的计算机底层资源的管理任务中解放,使人们能关注业务流程的开发。这一点,游戏引擎也是一样的效果。在没有游戏引擎的情况下,开发一款游戏,开发人员除了要关注游戏本身的逻辑,还要搞定音频的输入输出和处理,以及视频的输入输出和处理。尤其是视频方面,一款具有绚丽视觉效果的游戏需要花大量的精力进行DirectX和OpenGL的编程。游戏引擎的出现则大大简化了这方面的任务。如今已有许多优秀的游戏引擎可供各种类型的游戏开发者选用:比如刚才提到的2D游戏开发中比较流行Cocos2D,以及3D游戏开发中比较受欢迎的Unreal(虚幻)和Unity3D等等。 iOS在7.0版本发布后,苹果推出了一个和Cocos2D非常相似的游戏引擎——SpriteKit。这个引擎的设计理念与Cocos2D非常相似,除了其本身只支持iOS平台。
导演Director
Cocos2dx中把统筹游戏大局的类抽象为导演(Director),Director是整个cocos2dx引擎的核心,是整个游戏的导航仪,游戏中的一些常用操作就是由Director来控制的。
按照面向对象的设计原则和反向依赖原则:精灵不应该依赖层、层不应该依赖场景、场景不应该依赖整个流程。因此导演对象才是整个流程的代表,它负责游戏全过程的场景切换。
导演通常只有一个,因此这个对象是单例(singleton)。Cocos2d框架已经预定义了该实例,不需创建,直接使用即可。 导演对象接受层对象/场景的要求,按照预先设计好的流程来终止、压栈、激活当前场景,引导下一个场景。
场景Scenes
是一个特殊的节点,它是所有节点的基础。场景的目的在于呈现出游戏的可操作部分和展现游戏场景(如:游戏结束、主页面和高分排行榜等)。每个场景都是通过不同的层(Layer)的叠加和组合协作来实现不同的功能的。通常每个场景都是有一个或几个层组成的。
图层Layer
这是写游戏的重点,它呈现出的是玩游戏的具体区域。与Photoshop的图层作用类似,都是透明或半透明的层进行叠加。这意味着某个场景可以由多个图层构成。一个图层承载背景画面,另一个图层可呈现游戏动作发生之初。编写cocos2d程序时,大部分工作就是编写CCLayer的子类去实现所要的效果。CCLayer负责处理事件event。Events会从第一个向最后一个layers传递,直至某个layer获取event并处理它。要向场景添加层,我们可以使用addChild方法。
精灵Sprites
指的是那些真正赋予游戏灵魂的事物,即游戏的角色。比如,若制作太空游戏,则你的飞船和敌人就是各个游戏精灵。用于深化用户游戏体验的每个角色都可以当成是精灵。从技术上讲,精灵就是一个可以不断变化的图片。这些变化包括:位置移动、旋转(以自身几何中心或以某个屏幕坐标为轴)、放大缩小、运动(按一定时间间隔连续显示一系列图像,形成运动效果)。因此构成了以下一些基本操作。精灵一般都有自己的属性,比如材质(即所代表的角色或物体的长相,说直白一点就是贴图)、颜色、大小、位置、是否可见等等。而游戏逻辑,大多都是针对各个角色的这些属性进行操作。
什么叫3D游戏? 3D游戏就是三维游戏,3D 中的D是Dimensional(维)的缩写。三维游戏中的点的位置由三个坐标决定的。客观存在的现实空间就是三维空间,具有长、宽、高三种度量。三维游戏(3D游戏)是相对于二维游戏(2D游戏)而言的,因其采用了立体空间的概念,所以更显真实,而且对空间操作的随意性也较强。也更容易吸引人。 什么叫2D游戏? 2D游戏最显着的特征是所有图形元素是以平面图片的形式制作的,地图无论是拼接的还是整图制作,其地表、建筑都是单张的地图元素构成的。而动画则是以一张一帧的形式预先存在的。这些图形元素最终都会以复杂的联系方式在游戏中进行调用而实现游戏世界中丰富的内容。 游戏循环(Game Loop) 游戏在运行的时候,其实某种程度和动画差不多。事实上游戏引擎一般会以最大的努力来渲染每一帧的画面,而每一帧的渲染之间的过程就是一个循环,也就是游戏循环(Game Loop)。游戏循环一般是在渲染每一帧画面之前进行几项任务。这几项任务一般都会为开发者提供接口,以完成游戏功能。