内容概要
2006年第一次总结关于游戏程序员的知识体系的博文

【欢迎转载,请注明作者:房燕良,原文出处:游戏程序员的自我修养

我见过一些朋友,他们想学习游戏编程,太过急于求成,总是一位的追求最新的技术,最高深的技术。例如一个刚刚大学毕业的朋友,我看他对于C语言指针的概念理解的很混乱,就劝他应该加强语言基础学习,过了一段时间又遇到他,他却想和我讨论多线程的程序设计。基础知识不牢固,等遇到问题的时候往往摸不到头脑。就像《Joel说软件》中说的那样:抽象层往往是有漏洞的,所以在一个项目中必须至少有一位了解所有细节的“编程高手”!下面是我认为一个职业游戏程序员需要具备的知识,或者是学习路线。匆匆写来,也许有疏漏,但是花时间去学下面这些东西肯定是值得的!

1、基础知识

首先是编程语言。现在游戏开发的主流语言是C++。C++是一门复杂的语言,学了这么多年,我都不敢说自己精通C++。要想用好它必须付诸长时间的努力。需要特别注意的是STL是C++中非常重要的部分,不要忽视对它的学习和使用。

然后是操作系统及其API相关的知识。要想开发出在某个操作系统上高效运行的程序,对操作系统有深入的了解是必要的。我主要在Win32下开发,对其他平台接触较少,举例来说FileMap,IOCP都是操作系统特有的功能,用好这些功能可以使程序发挥出操作系统更多的功能。还有一些细节,如果不了解就很容易出问题,例如DLL链接的问题。

软件工程知识。不要只顾着低头编程,要注意你所在的项目,要很好的和别人沟通。无论把自己定位成技术高手还是技术领导者,都需要学习软件工程的知识。

熟练使用开发环境和版本控制软件。常用的有MS Visual Studio .Net 2003,MS Visual Source Safe,GCC,CVS。

丰富的游戏经验也是很重要的。如果你极少玩游戏,那么你在一个游戏开发的团队中是很难与别人交流的。例如,有人会说我希望镜头效果象《古墓丽影》那样,如果你没有玩过类似的游戏是很理解的。你甚至连策划案都看不懂,或者你认为你看懂了,结果做出来的东西完全不符合游戏的常理。所以,你至少应该玩过主流的游戏,特别是你正在制作的同类型的主流游戏。对于一个不是真正喜欢游戏的,这一点是很难做到的。

2、客户端方向

术业有专功,游戏越做越大,需要的知识越来越多,一个人很难对所有方面都学的很深入。如果你想致力与客户端引擎技术方面,那么下面这些知识都要学。

  • 一些图像处理技术。例如颜色混合,图像平滑,轮廓查找,无论你是做2D游戏还是3D游戏,这些东西都用的着。
  • 3D图形学基础。不要以为渲染工作都丢给显卡去做了,你就可以不管其中的理论,要想做3D引擎,基础知识掌握好很重要。
  • 熟悉D3D。现在主流的3D API应该是D3D,必须要掌握,没什么好说的。
  • 3DS MAX插件开发。将美术制作的模型和材质导入到游戏中。另外,顺便了解一下3DS MAX的体系结构,肯定很有好处。
  • 编辑器开发,一个游戏需要很多内部的工具。甚至可以说需要一个内容制作平台,一般要用到MFC,也可以用C#开发。
  • 3D引擎技术,这是最吸引人的一部分了,包含的内容很多例如SceneGraph,Portal,Terrain,Shadow,碰撞检测,Shader编程等等,很多很多。建议先找一个开源的看看,OGRE就是个不错的选择。
  • 人工智能和物理模拟。这两个方面往往不被重视,特别是在网络游戏中。实际上,如果你实现了一个很好的群体行为,或者刚体运动模拟,效果是很惊人的!

3、服务器方向

先说明一下我并没有服务器编程的经验,这里就我的一些了解,试着说说。:)

  • 多线程编程。现在的服务器几乎都会使用多线程,好的多线程设计会大大增加程序的效率。
  • 数据库。玩家的数据必定要使用数据库来存储,现在用SQL Server或者MySql的比较多。
  • 大规模的通讯程序设计。想象一个游戏世界需要负载几千人,这个通讯量可不小。对于程序设计来说大数据量和高效率总是难题。

4、其他

  • 脚本语言。前几年大家还都在实现自己的脚本语言,现在好像用Python或者Lua的成了主流。