HIHGame 0.1架构设计(Original)

Harmony.Original

  在开始制作我们的游戏之前,有凭想象写过一个架构图。像是这个样子:

  这个图的作用是用来设计程序代码要按什么样的结构去组织和编写。如果把软件开发和建造房屋作比较的话,编写程序相当于堆砌砖头,程序的设计图就对应于房屋的设计图。一所坚固舒适美观环保的建筑一定是先经过详细周密的设计,有各种设计图出来之后才叫人开始照图砌砖头的。不过能力有限,先力所能及设想一下,再到实践中找到感觉好了。

  然后我先来解释一下开始这个图为什么要这样画吧。

  一个游戏的核心是要围绕着做两件事,一件事是做更新(Update),一件事是做绘图(Render)。所以先把游戏里的东西分两类,要进行更新的东西(Updatable),要进行绘制的东西(Renderable)。然后如果有一个东西要进行绘制就继承Renderable进行扩展,要进行更新也是同样的。

  用UpdateController来统一负责对所有的Updatable进行更新,加入UpdateController的东西就会立即开始得到更新,Remove了就不被更新。为了方便,把这个类设置为单例类,整个游戏就使用一个更新队列,需要更新的物体比较容易管理。

  有一个叫Sprite的东西是游戏最小的绘图单元,负责对图片进行放大缩小旋转剪切设置透明度,设置是否可见等等绘图操作的物体。绘图的部件之间可能会需要有从属关系,父部件被缩放旋转移动改变可见性以后,它的子部件也会有同样的变化。比如弄个纸娃娃系统,人物的衣物装饰总是要随着人物一起改变的。所以一个绘图单元上可以添加删除子单元,形成一个树状的结构,并设置游戏绘图是通过从一个顶层绘图单元沿着树的结构遍历进行绘制。

  Animation是作用于Sprite的东西,然后继承它扩展出缩放旋转移动之类的动画效果。每一个Animation都要对应一个EaseFunction,EaseFuction用来为动画指定缓动效果,比如先加速再减速还是一直加速就叫缓动效果。各种缓动效果以不同方式实现EaseFuction的Func函数出现。

  因为打算使用叫Box2D的物理引擎,在Box2D中有纯粹表示物理逻辑的东西叫做Body,接着想到我们游戏里只要使用Body来处理物理的逻辑,然后用Sprite来显示实际看到的东西,结合二者不停做更新,让看到的东西Sprite和逻辑上的东西Body同步作对应就得到我们的游戏物体Object。

  这个就是我们最初对游戏系统编程上主要的构思了。开始真正进入编码以后当然发现了很多的缺陷。在努力思考并完成第一版本的游戏开发以后,架构就变得更复杂考虑更周到一些了。

本文写于2011年3月24日

标题目录