游戏对象模型设计与实现(一)
准备做一个 RPG 的游戏。由于以前没有做过游戏,首先学习了 cocos2d-iphone 的一些资料,再从网上看了一些写游戏的教程,自认为可以动手开始写框架的时候,发现遇到了相当大的困难。
cocos2d-iphone 的教程或者网上的一些其他教程有一个共同点:都是拿一个 太空大战
或者 坦克大战
之类的作为实现的例子。诚然这种简单的游戏可以充分考虑展现游戏框架本身的特点,但是从游戏编程上来说,有很大的误导之嫌。再加上由于没有游戏编程的经验,同时受这些教程或者书籍中的这些例子的误导,思维上还是以写软件的方式来写游戏,认为游戏不过是一种特殊的软件。
当动手设计游戏框架的时候,自己才发现,要实现一个稍微复杂的游戏基本上是一个不可能的目标。排除美工方面的因素不提,单说游戏框架,RPG 游戏的框架使用软件的方式基本上无法实现,主要表现在:
- RPG 游戏太复杂,里面有太多的物品。使用类继承的方式,或许要写几十甚至上百个类。
- 框架的目标本来是支持利用脚本进行扩展和写游戏的 AI 逻辑的,但是同样受到第一点因素的影响,不太可能实现。
- 即使实现了,估计要到猴年马月了。
然后继续疯狂查资料,看设计,大约花了几天的时间才发现,一开始的出发点就错了!前面看过的书籍和教程或许在教人写一个非常简单的游戏,或者说教你如何调用框架 API、如何写动画、如何写 坦克大战
和 太空大战
,却唯独没有教人如何写游戏!!!
说白了,一个成熟的 RPG 游戏绝对不是用写`太空大战`或者`坦克大战`这种方式所完成的。其原因在于这些游戏都是使用传统的面向对象(OO)方式实现的。实际上这样的游戏在商业上几乎全部采用组件方式(ES)来实现的。
传统的 OO 方式叫做 Object-Centric
,而组件的方式为 Component-Based
或者叫
Property-Centric
亦或 Entity-System
。 具体还没有一个标准的称谓,但是其本质是一样的。