什么应该在2D游戏引擎?

时间:2009-04-13 13:57:43

标签: c# xna

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

这就是引擎中的内容:

  • 物理学(Farseer Physics)
  • 粒子引擎(Mercury Project)
  • 2D相机
  • 输入处理
  • 屏幕管理(菜单,暂停屏幕等)
  • 精灵(动画,精灵表)
  • 而XNA就像Sound。

我是否遗漏了对游戏引擎至关重要的任何内容?

16 个答案:

答案 0 :(得分:58)

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

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

所有代码在您的第一个和第二个游戏之间变得很常见。

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

一旦你有了这个游戏,写下另一个游戏。然后,当你这样做时,检查第二个游戏的代码。从第一场比赛中重用了多少?

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

这并不意味着您不应该计划,或者不应该尝试编写好的代码。但要确保你正在努力实现一些具体的东西,你可以从一个坏的方面讲述一个好的实现。游戏的良好实现,是有效的,有趣的,并且不会崩溃。编写代码以首先实现这些目标。

引擎的良好实现?那太棘手了。什么是渲染器的良好实现?一个AI框架?粒子系统?最终,确定你是否拥有一个好引擎的唯一方法是看看它在实际游戏中的效果 。因此,如果您没有游戏,则无法评估您的引擎。如果您无法评估引擎,则无法判断您编写的代码是否真正有用。

答案 1 :(得分:19)

引擎的主题或市场。如果您正在做基本图形引擎以外的任何事情,您将需要专注于您的引擎市场,如RPG,策略,拼图,平台游戏,动作或FPS(好的,不是FPS)。

这将帮助您指明自己需要的方向,以便在不询问我们的情况下进一步增强引擎。像虚幻引擎这样的引擎可以做多件事,但它最常做的就是为FPS游戏制作它。同样,您应该定制引擎以使其适合特定的感兴趣领域,因此可以选择适合该类型的游戏玩法。

你可以把它变得一般,但是要意识到你的引擎越普遍,编程就越难,时间和技巧都是明智的。如果有更具体的平台可用,其他程序员也不太可能选择通用引擎(除非就是这样)。或者只是编写自己的,因为修改通用引擎与创建自己的引擎一样困难。

答案 2 :(得分:12)

还有一些事情:

  • 寻路 - 对AI非常有用
  • AI - 可能 - 取决于你想要引擎的通用程度。
  • 高分
  • 重播 - 让高分更有趣,因为您可以实际观看它们。

答案 3 :(得分:6)

一些想法:

  • 人工智能(可能只是简单的AI工具,如pathfinding algorithms
  • 保存全部或部分游戏状态(以便稍后暂停和重新启动或保存高分)。

答案 4 :(得分:5)

我认为你已经涵盖了2D引擎的一般要求。我唯一想念的就是:

  • GUI库

还可以简化开发过程:

您可能还会在XNA的现有内容之上添加另一个图层:

  • 非常简单的网络/大厅实施
  • 多个控制器的更抽象处理(在游戏会话期间DropIn / DropOut,比如参见Resident Evil 5 Coop) - 可能是基于事件的

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

答案 5 :(得分:2)

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

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

答案 6 :(得分:1)

3D加速应该在2D引擎中。

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

答案 7 :(得分:1)

  • 动画框架,这样你就可以说:拿这个精灵,沿着这个方向移动它,使用这个速度加速这个路径,加速等等
  • 基本GUI系统。不要实现整个Windows,而是基本的东西,如指针和按钮等 - 保持基本
  • 调试组件,用于显示FPS,精灵数等

同样好的一点是制作一些游戏,然后你会快速看到你为每个游戏重复做的事情,然后研究如何将它带入引擎。

答案 8 :(得分:1)

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

答案 9 :(得分:1)

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

答案 10 :(得分:1)

  • 2d照明系统是一个很好的高级功能。您可以使用Krypton
  • 地图编辑器。或者甚至更好地支持任何与“Tiled Map Editor”兼容的拼贴图格式。所以你可以使用Tiled。
  • 游戏操作的计划程序/计时器。
  • 屏幕擦除效果,如翻页,淡出等,以在屏幕之间进行漂亮的过渡。
  • 构建视差的游戏图层也很有用。
  • 在游戏机中处理命令或脚本而不重启。
  • 轻松加载纹理图集作为精灵或动画。

答案 11 :(得分:1)

很好的工作, 我们(我和我的一些朋友)实际上也在研究游戏引擎, 我们已经得到了你提到的所有内容,但我们还有以下内容。

  • 音频管理员:一个处理背景音乐和声音的简单类 XNA中的效果。
  • 视频管理员:它并不复杂,是处理视频的简单类 在XNA中玩。
  • 效果管理器:负责像bloom,blur这样的东西 黑/白色......等。

祝你好运:)

答案 12 :(得分:0)

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

答案 13 :(得分:0)

根据目标游戏类型,包括带有节点和边注释的导航图。 (适用于许多游戏,但对于使用2D图形引擎制作的令牌侧滚动器而言并非如此)

  • 用于生成它们的组件(通过泛洪填充算法)。
  • 请务必包含所有主要路径查找/规划算法(A * / Dijkstra /等)以遍历这些图表。

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

相关事项:

  • 基于位置的触发器(玩家进入一个看不见的圆圈并发生一些事情 - 排队过场动画,开始伏击等)。我想说为触发器提供一个基类,并实现一些基本的,以显示它是如何完成的(即武器拾取等)。
  • 一些游戏引擎实现网络(虽然这是'xna东西'的一部分)

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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