如何创建一款FPS游戏?

3
我想知道如何使用SDL库创建FPS游戏?是否有一些书籍可以通过示例进行解释?
5个回答

21

这是一个非常开放式的问题。你可以写一本书来回答它。但我们先指明正确的方向...

第一步,你需要具备良好的调试技巧才能完成这样的项目。阅读Steve McConnell的Code Complete。全部阅读。所投资的时间将比你阅读/实验任何其他内容都更有价值。

获取一些游戏源代码。任何游戏都可以。确保在看到复杂的代码之前先看到一些简单的东西,并且请记住在查看任何游戏代码时,他们可能花费了比你更多的时间来协同工作。这样做的目的是为了看到代码结构。

获得3D数学的参考资料,不必太深入,但你需要知道如何反复推导出点积等内容,以便能够计算出相机在世界中的矩阵等(即使你没有编写任何渲染代码)。

(编辑)这是一本关于3D数学的好书:Mathematics for 3D Game Programming and Computer Graphics, Second Edition (Game Development Series) 这并不是你在大学里学习的那种,它更像是三角学和更高级的实用概念之间的交叉:如何为自己创建一个简单物理,高效碰撞检测等的工具箱。

你需要了解一些渲染和管道方面的知识。SDL会给你一个好的起点,但请确保你理解它在做什么。

阅读有关实际系统设计的内容,你的各个系统将必须相互配合。认真考虑。你的系统可以使用C或C++编写,重要的是思考你的数据/控制流如何流动,而不是完美地模拟设计模式(尽管这些也非常有用)。

AI基础,不是“真正”的AI,而是功能性AI;这是有很大区别的。状态机是一个很棒的开始,对于简单的FPS已经足够了。

学习一些关于估算和规划的知识。制作FPS游戏时,你不会有足够时间去做所有你想要做的事情。你必须同时进行分类和学习如何分类; 它们是两个不同的事情,后者更难。经验是最好的老师。(尽管传奇人物麦康奈尔也有一本关于此的书)

建立一个将游戏玩法插入到你的关卡中的系统。如果只有你一个程序员,那么你最好编写一个插件,用于已有的编辑程序(例如3DS Max)。对于一个程序员来说,我强烈推荐Max而不是Maya。Maya脚本很好用,但更适合聪明的非程序员使用。我发现3DS Max更能像程序员一样思考创造和编辑你的世界。

你可以花费数年时间开发工具,以使你能够正确地做这件事,因此你要以一种让你能够快速准确地编辑的方式来做事情 如果你正在制作自己的编辑器,请将其整合到你的游戏世界中。 如果你的世界不是真正的三维的,并且你想快速制作很多关卡,你可以将你的关卡数据保存为像这样的格式,这会节省你很多时间 其中X是墙壁,其他字母是游戏对象,一个简单的解析器可以将它们转换为游戏对象和世界坐标。

 xxxxxxxxxxxxxxxxxxxxxxxx
 xx..........P..........x
 xxxxxxx...........I....x
 xR....xxx...........E..x
 xx.................0xxxx
 xxxxxxxxxxxxxxxxxxxxxxxx

但这一切都取决于你的游戏。我的观点是,你需要诉诸于所谓的“贫民窟编码”,即如何将游戏数据导入到你的世界中非常重要,而且你需要考虑一些既易于快速实施又适合你使用的方法。

最终关键在于你的目标是什么?如果你的目标是学习以绝对正确的方式编写代码,那么你需要花费大部分时间在代码迭代上,因为一个月前看起来还不错的代码现在可能需要重新修改,以满足你现在的需求。不要害怕重写代码,这样做可以让你学到更多,但如果你的目标是功能性的话,你可能需要想办法将某些东西(比如嵌入游戏数据和坐标到代码文件中)直接加入代码中。只要你知道自己在哪里进行了修改,并且已经将其与好的代码分开,以便在有机会的时候能够回过头来正确地编写代码,这样就可以了。

总之,你需要决定你在这个项目中的目标是学习还是功能性,并在两者之间找到一个平衡点。


2
你可以随便写一本书。事实上,已经有几本写成了。 - Dave Sherohman

5

fileshack下载Quake 3源代码并学习。


1
一个好观点。向大师学习从来不会有害。(尽管要意识到这可能已经过时,即使是大师也可能犯错或者没有考虑到可扩展性) - David Frenkel

3
尽管长篇帖子在长期内很有价值,但我觉得它并没有给人足够的即时动力。以下是一些事实以及我的意见:
- SDL是一个2D图形库,你无法使用2D编写FPS游戏,因此你必须使用3D库,比如DirectX或openGL。
- SDL可以“同步”并与openGL配合使用来进行图形处理,但这个主题的在线帮助不是很多。
我建议你去Lazyfoo.net,这是一个非常好的初学者资源,可以教你如何使用SDL进行游戏编程,它会教你如何将内容绘制到屏幕上,并且还会教你如何将这些知识应用于游戏编程。通过这个网站,你将能够制作俄罗斯方块等其他2D类型的游戏。
接下来,你就可以准备开始3D游戏开发(这需要更好的数学掌握能力,而且相对简单的事情需要更多的代码)。如果你选择openGL,可以查看NeHe的教程,他们目前正在开发新的教程,使用SDL和openGL进行编程。因为旧的教程虽然很有价值,但是编码质量比较糟糕,还使用了Windows(win32)API。
请记住,游戏开发是你遇到的最具挑战性和最有回报的编程领域之一,祝你好运!

1

虽然与SDL无关,但NeHe的OpenGL教程是学习如何进行3D编程的绝佳起点。

如果这是你的第一款游戏,你可能希望把目标放得低一些,不要追求FPS。使用SDL编写一个简单的2D俄罗斯方块游戏将教会你有关该库的所有知识。


0
几乎所有标题中带有“游戏编程大师的技巧”的内容都会向你展示如何制作FPS游戏。LeMothe非常喜欢它们。
编辑:忘记了这些标题。

它会向你展示如何操作,但我不认为它们是好的。我多年前读过的那本书推崇各种不良实践,根本算不上“大师级”质量。 - rmeador

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接