Component-based Game Object System
其实component based game object system已经不是什么新玩意儿了,在被庞大的游戏逻辑系统和企划蹂躏无数次之后,Gas Powered Games已经在Dungeon Seige中完成了这种尝试。最近看了几篇文章才发现确实值得尝试,尤其是对于拥有庞大道具系统以及full feature的商业游戏:
http://www.drizzle.com/~scottb/gdc/game-objects_files/frame.htm
http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/
Bjarne Rene: Component Based Object Management. Game Programming Gems 5, 2005, page 25.
个人看法:对于full data-driven的要求(不只是"data"是由数据驱动,而是"data layout"或"scheme"或"type"是由数据驱动)来说,硬用C++确实不够明智。在一个需求经常变动的情况下,宁肯使用component object system来以性能换灵活性。Component之间的交互可以通过1)QueryInterface,2)Message Routing两种方法结合来做。实际上说白了,这也是很多动态语言(或称脚本)弥补C++的地方。其实我很看好component based object system可以实现在C++中但由脚本实际组合对象(或者整个系统全部实现在脚本中,只有关注效能的模块由C++来扩展)。
于是我们要创建一个勺子,但其实对象都由组建聚合起来,并不存在一个头重脚轻、超长的继承树。。。There's No Spoon。