游戏对象模型设计与实现(一)

准备做一个 RPG 的游戏。由于以前没有做过游戏,首先学习了 cocos2d-iphone 的一些资料,再从网上看了一些写游戏的教程,自认为可以动手开始写框架的时候,发现遇到了相当大的困难。

cocos2d-iphone 的教程或者网上的一些其他教程有一个共同点:都是拿一个 太空大战 或者 坦克大战 之类的作为实现的例子。诚然这种简单的游戏可以充分考虑展现游戏框架本身的特点,但是从游戏编程上来说,有很大的误导之嫌。再加上由于没有游戏编程的经验,同时受这些教程或者书籍中的这些例子的误导,思维上还是以写软件的方式来写游戏,认为游戏不过是一种特殊的软件。

当动手设计游戏框架的时候,自己才发现,要实现一个稍微复杂的游戏基本上是一个不可能的目标。排除美工方面的因素不提,单说游戏框架,RPG 游戏的框架使用软件的方式基本上无法实现,主要表现在:

  • RPG 游戏太复杂,里面有太多的物品。使用类继承的方式,或许要写几十甚至上百个类。
  • 框架的目标本来是支持利用脚本进行扩展和写游戏的 AI 逻辑的,但是同样受到第一点因素的影响,不太可能实现。
  • 即使实现了,估计要到猴年马月了。

然后继续疯狂查资料,看设计,大约花了几天的时间才发现,一开始的出发点就错了!前面看过的书籍和教程或许在教人写一个非常简单的游戏,或者说教你如何调用框架 API、如何写动画、如何写 坦克大战太空大战 ,却唯独没有教人如何写游戏!!!

说白了,一个成熟的 RPG 游戏绝对不是用写`太空大战`或者`坦克大战`这种方式所完成的。其原因在于这些游戏都是使用传统的面向对象(OO)方式实现的。实际上这样的游戏在商业上几乎全部采用组件方式(ES)来实现的。

传统的 OO 方式叫做 Object-Centric ,而组件的方式为 Component-Based 或者叫 Property-Centric 亦或 Entity-System 。 具体还没有一个标准的称谓,但是其本质是一样的。