游戏编程:通用方法和设计模式


9

我开始编写一个非常简单的游戏引擎,以便可以更好地学习OpenGL 3.x,但是由于我的经验不足以及对如何设计3D游戏的了解很少,所以我通常会遇到一些问题,使我意识到我应该设计自己的课程不一样。我面临的其他问题是如何在游戏中以简洁的方式跟踪时间并根据需要更新动作,以及如何告知渲染器需要重绘。另外,我仍然需要使用Get和Set函数来将各种标志从一个对象传递到另一个对象,这是不好的做法吗?

因此,正如标题所述,我对任何可以帮助我的书籍或文章/教程和资料来源都感兴趣,并且可以解释游戏设计中的一些常见设计模式(例如,游戏状态处理程序,字体等)。

顺便说一句,我仍在使用freeglut,您会建议我在进行升级之前或对OpenGL有了更好的了解后,转向一个更好的窗口系统吗?


12
标准的“我正在编写引擎”响应=写游戏,而不是引擎。引擎是一个深深的兔子洞。到目前为止,您做了什么研究?在这里,您可以通过选择一个重点突出的问题并搜索过去的问题来获得最佳结果。在编写游戏时,不断寻找新问题,一次一次。附带说明一下,意识到类需要重新设计是很常见的,并且这样做的过程称为“重构”,这意味着您可以边学习边学习,这是一件好事。
Patrick Hughes

1
感谢您的答复。抱歉,如果我不清楚,我真的不想构建一个完整的游戏引擎,但是我想学习一些游戏设计中使用的基本设计模式,以便更好地设计课程。我想应该有一些解决常见问题的通用解决方案。我越深入设计,就会出现更多问题,找到答案也就越困难。到目前为止,我的研究还没有取得丰硕的成果,我发现了一个很好的教程,它更深入地介绍了游戏的制作方法,是codeproject.com/Articles/27219/…
Grieverheart

1
我知道,在标题中添加“游戏引擎通用方法”倾向于使讨论转向...引擎=)在任何情况下,您都很难获得想要的东西,原因是不同类型的游戏,例如玛雅历法中的年份,每种类型都有自己的需求。如果您寻找特定类型的游戏,可能会有更好的结果,第一人称射击游戏非常常见,这可以使搜索引擎更具吸引力。
Patrick Hughes 2012年

FPS风格或自由漫游将是我想要的。本质上,我想创造一个可以尝试各种图形和动画技术的世界。我已经有一个基本的相机和动作,例如跳跃,起伏和模型加载,但是感觉不太好,例如,我将行走动画放在相机类中,并且使用内部变量对帧进行计数。我主要是修补漏洞,并且没有产生任何可靠的结果。我想这是学习过程的一部分,也许我正试图过快。
Grieverheart

3
游戏编码完整,游戏引擎体系结构是关于游戏编码的两本书,您将大致了解开发流程和基础技术,它们涉及了所有方面
dreta 2012年

Answers:


11

因为大约两个月前我还在您的舞台上,所以我会写一个正确的答案。

我开始编写一个非常简单的游戏引擎,以便可以更好地学习OpenGL 3.x,但是由于我的经验不足以及对如何设计3D游戏的了解很少,所以我通常会遇到一些问题,使我意识到我应该设计自己的课程不一样。

不用担心 由于缺乏经验,您将永远无法考虑将给定类用于引擎的所有可能性和方式。最好考虑一下类的主要功能,实现它并在以后进行重组。不要试图思考太多,在这个阶段您会浪费时间。我的第一场比赛完全是一团糟,我敢肯定大多数人都是这样。

我面临的其他问题是如何在游戏中以简洁的方式跟踪时间并根据需要更新动作,以及如何告知渲染器需要重绘。

您需要的是有关什么是游戏循环的知识。是一个很好的起点。一旦开始编写更复杂的代码(例如处理物理学),那么您可能希望考虑具有可变帧时间的循环,但是循环要小。现在,一个简单的固定框架游戏循环就足够了。

另外,我仍然需要使用Get和Set函数来将各种标志从一个对象传递到另一个对象,这是不好的做法吗?

这更多是软件工程问题。随着时间的流逝,您将看到需要保护哪些数据以及哪些数据是安全的。最好是仅实现一个功能,然后查看未在功能外部公开的内容,并将其视为公共数据。

这都是经验问题。您将编写一个相机类,然后在变换矩阵旁边看到您想要的功能。如果您需要任何即时提示,我必须说,实现裸露的骨骼,以后再扩展。

文章和书籍:

  • 游戏引擎开发

这些书讨论了现代游戏引擎和管道的体系结构。他们将为您提供有关基础技术的良好概述。我推荐第一本书,如果您必须选择的话,它对某些技术的偏见要小一些,尽管最后您很可能希望通读这两本书,因为它们都是很好的知识来源。

http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135

http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806

  • 的OpenGL

http://ogldev.atspace.co.uk/index.html

http://www.arcsynthesis.org/gltut/index.html

http://www.opengl.org/sdk/docs/man3/

  • GLSL

http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/

http://www.opengl.org/sdk/docs/manglsl/

  • 碰撞检测

http://www.peroxide.dk/papers/collision/collision.pdf

(我将其链接起来,因为我发现很难找到有关如何正确进行3D碰撞检测的文章。)

有更多书籍,但是当您完成本课程(尤其是Game Engine体系结构)时,您将更好地了解所需内容。

顺便说一句,我仍在使用freeglut,您会建议我在进行升级之前或对OpenGL有了更好的了解后,转向一个更好的窗口系统吗?

WinAPI,如果您有时间并且将学习Windows编程(如果您正在为Windows开发)。FreeGLUT非常适合学习,但是最终您将需要更多功能。不过,如果您想走另一条路,则可以使用SFML或SDL之类的库启动OpenGL。除非您像我一样固执,否则请坚持使用FreeGLUT。我直奔WinAPI。


嘿,德拉塔,非常感谢您的回答,我一直在等待:P!幸运的是,由于我已经实现了一些物理模拟算法,因此我已经知道如何进行碰撞检测了。
Grieverheart'5

@ user1294203太棒了,刚开始我迷路了,所以就贴出来以防万一
dreta 2012年

如果您不想与平台特定的代码混淆太多,我会投票支持SFML。它小巧,简单,干净,您可以轻松地深入代码以了解它如何包装WINAPI。
edin-m 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.