14

我过去曾尝试仅使用对象使用 C++ 开发 2D 游戏,但是,在设计过程中,我不知道应该如何以及应该将引擎的哪些部分拆分为更小的对象,它们应该做什么以及如何使它们能够正确地相互交互。我正在寻找书籍、教程、论文,以及任何能详细解释游戏引擎设计的东西。谢谢。

4

6 回答 6

20

必读:http ://scientificninja.com/advice/write-games-not-engines

为什么你认为你需要一个游戏引擎?编写实现游戏所需的代码。随着需求的变化,随时修改它。当你有一个完整的游戏时,退后一步,看看结果是什么样的。

您不能也不应该在一开始就布置一个完整的类图。勾勒出您想要什么通用组件以及它们的职责应该是什么的粗略概念,然后尝试对其进行编码。从您确定的课程开始。迟早,其中一些会变得又大又笨重,因此您将其拆分为多个较小的。有时,您可能会发现几个类基本上都在做同样的事情,因此您将它们合并在一起。希望您迟早会得到一个可行的设计这比您尝试预先设计游戏引擎所得到的要多。

于 2009-12-30T01:53:06.933 回答
4

没做过游戏,怎么做引擎?那里有大量的免费引擎,否则您将花费​​ 20 年的时间尝试完成某件事,因为您将一遍又一遍地重写。

于 2009-12-30T04:55:40.173 回答
3

游戏中有两种重要的对象。有些对象包含进程,有些对象与环境和用户交互。

对于那些运行诸如更改对象不透明度之类的过程的对象,您希望它们独立于任何类级别变量。他们应该简单地接受值和返回值。如果您有一个计算重力的过程,该过程应该接收正在计算重力的对象,并返回该对象正在经历的重力量,以及如果游戏发生在太空中的重力方向。

第二种更重要的对象类型是与用户和环境交互的对象。这些对象都应该继承同一个基类。基类将需要图像、x 和 y 位置,并且可以具有执行特定过程的变量,例如更改变量的速度或方向。有了这个基类,您就可以使用每个对象“内置”变量(如速度、方向以及 x 和 y 位置)来执行类似于前面提到的重力过程的过程。

您还需要设置对象以在某些条件下运行代码片段。让您的基类提供在满足这些条件之一时运行的函数可能是一个好主意。一些有用的条件函数是在对象首次创建和销毁时使用的条件函数。设置计时器后要执行的条件函数。一个条件函数,你可以在其中放置代码以在屏幕上绘制图像。按下键盘或鼠标按钮时关闭的条件函数。一个条件函数,每秒执行一定次数,以计算物体上的重力等事物。

在创建游戏时,这个框架对我来说非常有效。它适用于任何类型的游戏,但适用于其他类型的程序非常糟糕。抱歉,如果我的文字不清楚,我正在我的 iPod 上打字,我很难回去编辑这里的东西。

于 2011-08-19T16:08:09.743 回答
2

http://fivedots.coe.psu.ac.th/~ad/jg/

这家伙介绍了一种很好的 oop 风格,并通过本书帮助您构建引擎框架。它在好东西上。

于 2010-10-05T08:57:35.923 回答
2

Eberly 的3D 游戏引擎架构3D 游戏引擎设计在理论方面相当重,但很好地涵盖了所有基础。

于 2009-12-29T23:38:47.060 回答
1

如果您想编写一个简单的 2d 游戏,了解您实际尝试做的事情的一个好方法是:

  • 编写一个简单的游戏循环,它只是以您想要的分辨率显示帧缓冲区

  • 渲染具有给定方向和从屏幕边缘反弹的速度的简单精灵

  • 确保您的逻辑和显示代码是解耦的

如果这听起来需要做很多工作,或者如果它包含想法/术语,你不能 100% 确定它们的含义:看看现有的一两个游戏引擎。

如果您只是想了解它是如何完成的,那么编写代码是一种很好的学习方式。

如果你对开发游戏更感兴趣,我强烈推荐 Unity 之类的东西作为基础,这样你就可以实际开发游戏了。由于它是一个引擎,随着时间的推移,您将了解有多少不同的部分,以及它们如何相互连接。

于 2020-06-17T07:23:44.063 回答