知易Cocos2D-iPhone 游戏开发教程002

基本概念

 为了全面掌握Cocos2D-iPhone的开发,我们首先需要了解该引擎的几个基本概念。实际上这些基本概念是所有游戏开发所必须的,并非Cocos2D-iPhone专有。任何游戏都是通过这些概念所针对的对象组建起来的,游戏的复杂程度决定了这些对象实现的复杂程度。

场景 CCScene

我们假设一个只有两关的游戏:第一关(大打2个小鬼,一个小BOSS);第二关(5个小鬼,一个大BOSS)。通常情况下,我们会这样设计整个游戏的流程(workflow):

开场动画,可以有几个目的:

l 简单介绍一下游戏操作

l 讲述故事背景

l 公司或者工作室动画LOGO

进入主菜单后可以引导用户:

l 开始新游戏

l 读取存档进度

l 设置游戏

n 声音

n 显示对话文字

n 游戏内容设置

l 高分排名通常都是列表,按分数排列。

l 帮助 操作手册简介

l 退出

接下来玩家的选择有多种,无论开始还是读取进度都会进入到游戏的预设关卡。游戏过程中第一关胜利则进入第二关,第二关胜利则进入结尾胜利画面(Screen)(播放视频或者在背景图上显示文字),确认以后进入排名画面看看本次得了多少分。有一个统一的画面处理失败提示,确定后跳转到主画面重新开始。

 我们可以看到,玩家玩游戏的过程就是在我们预设的画面之间进行跳转,根据一个画面玩家操作的结果(选择菜单项、杀死或被敌人消灭)跳转到不同的画面。

 这些构成整个游戏的流程的画面就是我们所说的场景,图中用黑色方块表示的。显然不同的场景都提供不同的操作,大致可以分为以下几类场景:

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

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

l 游戏场景:这是游戏的主要内容,除了这个场景之外的其他类场景基本上都是通用架构实现的。

那么不同的场景是如何实现不同的功能的呢?每个场景都是通过不同的层(Layer)的叠加和组合协作来实现不同的功能的。因此,通常每个场景都是有一个或者几个层组成的。

层(CCLayer

层是我们写游戏的重点,我们大约99%以上的时间是在层上实现我们游戏内容,如下图所示,一个简单的主菜单画面是由3个层叠加实现的:

细心的读者可能已经注意到,为了让不同的层可以组合产生统一的效果,这些层基本上都是透明或者半透明的(否则我们只能看到最上面的一个层了)。

层的叠加是有顺序的,如图所示:编号为1的图像背景层在最下面,2号中间,3号最上面。Cocos2D-iPhone也是按照这个次序来叠加画面的,处于最上面的层内部的不透明的内容将覆盖下面层的内容。

这个次序同样用于编程模型中的事件响应机制。即编号3的层最先接收到系统事件(手指单击屏幕事件),然后是编号2,最后编号1。在事件的传递过程中,如果有一个层处理了该事件,则排在后面的层将不再接收到该事件。

我们可以简单的把层理解为于我们在微软Windows编程中的窗口(hWnd或者WinForm,还有Delphi中的TForm)。

为了方便大家进行游戏开发,Cocos2D-iPhone从技术实现角度提供一些公用层:处理菜单用的菜单层(Menu),处理颜色显示的颜色层(ColorLayer)等。

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

下面我们重点介绍游戏的核心内容:精灵。

精灵(CCSprite

精灵是整个游戏开发处理的主要对象,地方的飞机、坦克是系统AI控制的精灵,代表玩家控制的我方飞机也是精灵。甚至随机飞过的一片云、一只鸟都是精灵。

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

l 位置移动

l 旋转(以自身几何中心或以某个屏幕坐标为轴)

l 放大缩小

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

所谓游戏,就是玩家操作一个或多个人工控制的精灵与一个或者若干个系统控制的敌方精灵进行互动:紧身肉搏、远程射击、贴近对话等等。

导演 (CCDirector)

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

 好了,有些OO编程基础的读者已经猜到导演(Director)对象的作用了。是的,按照面向对象的设计原则和反向依赖原则:精灵不应该依赖层、层不应该依赖场景、场景不应该依赖整个流程。导演对象是整个流程的代表,他负责游戏全过程的场景切换。

 导演通常只有一个,因此这个对象是单例(singleton)。Cocos2D-iPhone框架已经预定义了该实例,不需创建,我们直接使用就可以。

 导演对象接受层对象/场景的要求,按照预先设计好的流程来终止、压栈、激活当前场景,引导下一个场景。至此,我们可以勾勒出一个游戏的整体框架和Cocos2D-iPhone关键对象与之的对应关系:

 需要特别说明的是:任何时间,只有一个Scene对象实例处于运行激活状态。该对象可以作为当前游戏内容的对象的整体包容对象,对于Menu(菜单对象,继承Layer对象),通常属于当前场景的主层。以上就是一个游戏的主要整体对象架构。

 实际上,针对每个游戏场景而言,不同场景(关卡)、每一个层(静态、动态)、每一个对象(敌人、我方、中立方)其实都很复杂。万里长征,第一步吧。

...

如果您对本文感兴趣,可以到这里下载完整PDF示例源代码下载

你可能感兴趣的:(cocos2d)