32

好的,所以我最终基于 XNA 编写了自己的游戏引擎,我只是想知道我还需要什么来制作一个完整的引擎。

这是引擎中的内容:

  • 物理学(Farseer 物理学)
  • 粒子引擎(水星计划)
  • 二维相机
  • 输入处理
  • 屏幕管理(菜单、暂停屏幕等)
  • 精灵(动画,精灵表)
  • 还有 XNA 的东西,比如 Sound。

我是否遗漏了任何可能对游戏引擎至关重要的东西?

4

16 回答 16

59

你正在以一种颠倒的方式接近它。

您的引擎中应该包含以下内容:

所有在你的第一个游戏和第二个游戏中都被证明是通用的代码。

首先,写一个游戏。不要编写引擎,因为正如你所发现的,你不知道它应该包含什么,或者它应该如何设计。而是写一个游戏。

一旦你有了那个游戏,再写一个游戏。然后,当您完成该操作后,检查第二个游戏的代码。从第一场比赛中重复使用了多少?

任何被重用的东西都应该被重构到一个单独的项目中。该项目现在是您的游戏引擎。

这并不意味着你不应该计划,或者不应该尝试编写好的代码。但是请确保您正在朝着具体的方向努力,您可以在其中区分一个好的实现和一个坏的实现。一个好的游戏实现,是一个有效、有趣且不会崩溃的游戏。编写代码以首先实现这些目标。

一个好的引擎实现?这更棘手。什么是渲染器的好实现?一个人工智能框架?粒子系统?最终,确定您是否拥有一个好的引擎的唯一方法是查看它在实际游戏中的运行情况。因此,如果您没有游戏,就无法评估您的引擎。如果你无法评估你的引擎,你就无法判断你正在编写的任何代码是否真的有用。

于 2009-05-03T13:44:53.093 回答
20

您的引擎的主题或市场。如果您正在做超出基本图形引擎的任何事情,您将希望专注于您的引擎市场,例如 RPG、策略、解谜、平台游戏、动作或 FPS(好吧,不是 FPS)。

这将帮助您指出您需要前进的方向,以便在不询问我们的情况下进一步增强引擎。像虚幻引擎这样的引擎可以做很多事情,但它往往做得最好的是它的用途,即 FPS 游戏。同样,您应该定制您的引擎,使其适合特定的兴趣领域,因此适合该类型的游戏玩法。

您可以在一定程度上使其通用,但要意识到您的引擎越通用,编程就越难,无论是时间还是技能方面。如果有更具体的平台可用,其他程序员也不太可能选择通用引擎(除非仅此而已)。或者只编写自己的,因为修改通用引擎与创建自己的引擎一样难。

于 2009-04-13T14:36:19.877 回答
12

还有几件事:

  • 寻路——对人工智能非常有用
  • AI - 可能 - 取决于您希望引擎的通用性。
  • 高分数
  • 回放- 让高分变得更加有趣,因为您可以实际观看它们。
于 2009-04-13T14:26:43.813 回答
7

几个想法:

  • 人工智能(也许只是简单的人工智能实用程序,如寻路算法
  • 保存全部或部分游戏状态(用于暂停和稍后重新启动或保存高分)。
于 2009-04-13T14:07:13.953 回答
6

我认为您涵盖了 2D 引擎的一般要求。我在该列表中唯一会错过的是:

  • 图形用户界面库

还使开发过程更容易:

您还可以在 XNA 现有的东西之上添加另一层:

  • 一个相当简陋的网络/大厅实现
  • 多个控制器的更抽象处理(游戏会话期间的 DropIn/DropOut,例如参见 Resident Evil 5 Coop) - 可能基于事件

最后,您可能会添加一些“ready2use”着色器。或许可以从已停产的FaceWound(来自“Garry's Mod”开发者)那里获得一些灵感。

于 2009-04-13T15:01:38.567 回答
3

这取决于游戏,但通常需要的另一件事是良好的网络框架。

许多现代游戏,包括 2D 游戏,似乎都有某种形式的网络。

于 2009-04-13T15:01:11.890 回答
2
  • 动画框架,这样你就可以说:拿这个精灵,朝这个方向移动,用这个速度、加速度等沿着这个路径走
  • 基本的图形用户界面系统。不要实现整个 Windows,而是实现指针和按钮之类的基本功能 - 保持基本功能
  • 用于显示 FPS、精灵数量等的调试组件

制作一些游戏也是一件好事,然后你会很快看到你为每款游戏重复做的事情,然后研究如何将其放入引擎中。

于 2009-04-13T14:28:47.303 回答
2
  • 2d 照明系统是一个很好的高级功能。你可以为此使用氪星
  • 地图编辑器。甚至更好地支持任何与“平铺地图编辑器”兼容的平铺地图格式。所以你可以只使用 Tiled。
  • 游戏动作的调度程序/计时器。
  • 屏幕擦除效果,例如翻页、淡出等,以在屏幕之间进行漂亮的过渡。
  • 内置视差的游戏层也很有用。
  • 在游戏控制台中无需重启即可处理命令或脚本。
  • 将纹理图集轻松加载为精灵或动画。
于 2011-11-24T13:23:49.590 回答
2

干得好,我们(我和我的一些朋友)实际上也在开发游戏引擎,我们已经得到了你提到的所有内容,但此外我们还有以下内容。

  • 音频管理器:一个简单的类来处理 XNA 中的背景音乐和音效。
  • 视频管理器:它并不复杂,一个简单的类来处理 XNA 中的视频播放。
  • 效果管理器:负责绽放、模糊、黑/白等颜色。

祝你好运 :)

于 2013-06-03T07:36:30.710 回答
1

3d Acceleration 应该在 2D 引擎中。

使用当今大多数人拥有的 3D 硬件是为您的 2D 游戏获得惊人性能的最佳方式......

于 2009-04-13T13:59:57.513 回答
1

良好的碰撞检测非常有帮助。如果你有效地实现它,它确实减少了每一帧所需的时间。除此之外,在我的引擎(用于 Pygame)中,我有一种将主屏幕分成多个子屏幕的方法,我觉得这很有用。

于 2009-04-13T15:14:33.107 回答
1

根据目标游戏类型,包括带有节点和边缘注释的导航图。(适用于许多游戏,但不适用于使用 2D 图形引擎制作的令牌侧滚轮)

  • 生成它们的组件(通过洪水填充算法)。
  • 确保包含所有主要的路径查找/规划算法(A*/Dijkstra/等)来遍历这些图。

这样做的缺陷是您必须定义引擎的“地图”是什么,这可能会限制引擎的用户。

相关事项:

  • 基于位置的触发器(玩家进入一个不可见的圆圈并发生一些事情 - 排队过场动画,开始伏击等)。我想说为触发器提供一个基类并实现一些基本类来展示它是如何完成的(即武器拾取器等)
  • 一些游戏引擎实现了网络(尽管这是“xna 东西”的一部分)
于 2009-04-13T15:24:21.740 回答
1

首先要包含的最有用的东西是轻松使用引擎的工具。也许使用您的引擎来创建工具。我相信你会发现很多这样的缺陷。

于 2009-04-13T17:59:10.183 回答
1

简单的像素完美碰撞检测。不是先知物理学。简单的绘图例程,如drawline,drawcircle等。

于 2009-04-15T11:42:55.267 回答
0

瓷砖重复工具。允许用户添加/创建图块并操纵边缘以获得平滑重复图案的东西。

于 2009-04-13T15:00:54.183 回答
0

嗯。这个列表是一个“内部”列表。做伟大的引擎就是做伟大的“外部”清单。以 UE3 为例——它之所以出现,是因为有很棒的工具。您需要用于创建世界的工具,创建最佳资源包(它也应该在内部列表中;-)),用于碰撞对象规范等。另外,要添加到Organiccat 答案,您应该决定技术水平。您可以选择简单的精灵,也可以想要花哨的效果(因此需要着色器,并且需要基础设施)

于 2009-05-03T13:26:03.620 回答