前言 在过去三个月中,我都在致力于开发一款名为《Lunar Lander 3D》的小游戏。我着手这个项目的主要原因是希望掌握创造游戏所需了解的知识。除此之外,我还希望借此转移自己在课业上的压力。虽然这款游戏很小很简单,其开发过程却让我收获了大量有用的知识。我将在本文列出自己在开发游戏过程中学到的一些重要知识。
在进入正题之前,我想先说明一下,我并不是什么专业人士。我只是一个常坐在电脑前的呆子,本文内容面向想自己试着创造一款游戏的业余程序员和爱好者。所以本文的重点是让你如何完成一款游戏,而非制作一款技术华丽的半成品游戏。
programmer
你的理念并不罕见 如果你想完成一款游戏,你就必须认识到这一点。无论你有多看重自己以及自己的想法,你都要勇于抛弃其中的多数想法。当我开始制作自己的游戏时,满脑子都是自己想用的理念。我想在游戏世界中加入移动的平台的障碍,复杂的摄像系统以及一系列其他元素。但我知道如果我想完成游戏,就得更改自己的多数理念。要记住当你是孤军奋战时,你就无法搞定一个专业团队需要用一年以上时间才能完成的项目。虽然一年以上的时间对专业团队来说并非很长的时间,但却业余爱好者来说却是个大难题。要根据自己的想法合理安排开发时间,例如将其控制在6个月以内。
不要从头做起 如果你并没有什么编码基础,那就无法一开始就编写出一款游戏。这听起来难以让人接受,但如果你确实没有一系列持续使用的代码,你可能就无法持续长时间地编程。如果你没有那么长久的编程经验,那么就不能幻想开发一款游戏。我开始制作自己的游戏时,已经有了一个很大的代码库。我针对一般窗口创造、输入管理、粒子效果、运算以及各类用途的代码。有了这些现成的代码,我就能够快速展开工作,制作与游戏相关的内容。除此之外,我还不需要去测试这些代码,因为我之前编写的时候就已经测试过了。你在开始创造自己的游戏之前,不需要逐个编写每一节代码。只要花点时间先做一点基础工作即可。如果你觉得自己还是得创建一个代码库,那就先编写小型用来测试一下。我处理粒子效果、输入管理和控制执行代码时就是这么做的。这可能不像制作游戏一样令人兴奋,但对你却有长期的帮助。
借鉴想法 我要再次强调这个环节的重要性。当你开始编写一款游戏时,不要害怕使用他人的理念,库或工具。可以尽量借鉴,因为这可以让你的工作更轻松。我在制作自己的游戏时,借鉴了Conor Stoke的轴线对齐边界框树,Paul Nettle的碰撞检测文件,id Software的Q3Radiant关卡编辑器。为什么我要用其他人的想法和工具来解决自己本可以完成的问题呢?原因就在于,这样更简单——我使用这些不同的资源是因为节省时间。使用现成的方法进行碰撞检测,这样我就不需要将时间浪费在测试自己的碰撞系统上了。我根据自己的需求调整了id Software的地图编辑器,就不需要再制作自己的编辑器了。除此之外,id地图编辑器非常适合我,这又为我节省了不少功夫。不要执拗于自己的游戏一定要有定制工具和解决方案。如果你够精明,就会知道何时要采用新理念,何时可以使用现成的东西。
避免使用3D地形引擎 如果是为了创造游戏而制作引擎,那就很可能被卡在半途。无论你多努力地尝试,总会发现自己无所进展。根据我制作游戏的经验,你自己编写游戏时并不需要用到引擎。要记住,你是一个人而不是一家公司在编写游戏。你不需要一个反复重用的引擎。编写引擎的一个理由就是代码重用,但没有引擎你也照样可以做到这一点。只要设计合理,你就能够将自己其他项目的元素重用到游戏上。例如,我编写的游戏所用的新代码都不是特定的游戏代码,我可以将其重用于其他项目。编写引擎以获得引擎本身的知识及其背后的设计过程当然可以,像如果你是要制作一款游戏那就要避免这种情况了。
不要在图像上画蛇添足 你制作自己的游戏时,不要添加一些并不会让游戏更棒的图像特点。不要使用GeForce20那种很棒的扩展功能,以及其他的逐象素、凹凸贴图、纹理动画、逐象素深度阴影等元素,因为你根本就不需要。如果你将自己的游戏定义为靠图像来撑场面的那种,那你可能并不了解游戏。你制作的只是一个技术演示样本。我在自己的游戏中使用的最复杂的图像功能就是多重纹理,但如果要游戏正常运行也并不需要这种功能。我知道自己并非id Software成员,也并不需要很高端的硬件来支持我这款简单的游戏。如果你保持简单性,不但可以扩大游戏受众,还能够将自己的精力集中于更重要的环节,例如游戏玩法。