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

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

这是引擎中的内容:

  • 物理(Farseer物理)
  • 粒子引擎(Mercury Project)
  • 2D相机
  • input处理
  • 屏幕pipe理(菜单,暂停屏幕等)
  • 雪碧(animation,雪碧表)
  • 而XNA的东西就像Sound。

我是否错过了可能对游戏引擎至关重要的事情?

您的引擎的主题或市场。 如果你在做基本的graphics引擎之外的任何事情,你就需要专注于引擎的市场,比如RPG,策略,谜题,平台游戏,动作或者FPS(好吧,不是FPS)。

这将帮助您指出自己的方向,您需要去进一步增强引擎,而不问我们。 像虚幻引擎这样的引擎可以做很多事情,但它最擅长的就是FPS游戏。 同样,你应该调整你的引擎,使其适合某个特定领域的利益,因此被拿起来用于这种types的游戏。

你可以把它做到一般,但是要意识到你的引擎越是普遍化,编程就越困难,时间和技巧都是明智的。 其他程序员也不太可能拿起一个通用的引擎(除非这是全部),如果一个更具体的平台可用。 或者自己编写自己的代码,因为修改一个通用的引擎就像创build自己的引擎一样困难。

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

你的引擎应该是什么,如下所示:

所有代码在你的第一个游戏和第二个游戏之间都是常见的。

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

一旦你有这个游戏,写另一个游戏。 然后,当你这样做时,检查第二个游戏的代码。 第一场比赛有多less钱被重复使用?

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

这并不意味着你不应该计划,或不应该尝试写出漂亮的代码。 但是要确保你正在努力实现一些具体的东西,你可以从一个糟糕的东西中得到一个好的实现。 一个很好的游戏实现,是一个有效的,有趣的,并没有崩溃。 编写你的代码来实现这些事情。

一个好的引擎的实现? 这很棘手。 什么是渲染器的好实现? AI框架的? 一个粒子系统? 最终,确定你是否有一个好的引擎的唯一方法就是看它在实际游戏中的运行情况 。 所以如果你没有游戏,你无法评估你的引擎。 如果你没有办法评估你的引擎,你无法判断你写的任何代码是否真的有用。

还有几件事情:

  • path查找 – 对AI非常有用
  • AI – 可能 – 取决于你想要引擎的通用性。
  • 高分数
  • 重播 – 让高分更有趣,因为你可以真正看他们。

一对夫妇的想法:

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

我认为你已经介绍了2D引擎的一般要求。 我想在列表中唯一会想到的是:

  • GUI库

也为了使开发过程更容易:

  • 脚本引擎(LUA,C#脚本,…)
  • dynamic刷新的资产(见尼克·格雷夫林博客条目 )

你也可以在XNA现有的东西上添加另外一层:

  • 一个相当不实际的networking/大厅实施
  • 更多的抽象处理多个控制器(DropIn / DropOut在游戏会话期间,参见生化危机5合作社) – 也许基于事件

最后,你可能会添加一些“ready2use”着色器。 也许从停止的FaceWound (来自“Garry's Mod”开发者)那里得到一些启发。

这取决于游戏,但另一个经常需要的是一个好的networking框架。

许多现代游戏,包括2D游戏,似乎都有某种forms的networking。

一个物理引擎,可以做一个中途体面的胸部波动,就像那个DOA篮球比赛。

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

使用现在大多数人拥有的3D硬件是获得令人惊叹的2D游戏性能的最佳方式。

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

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

  • animation框架,以便您可以说:采取这个精灵,朝这个方向移动,使用这个速度,加速和这样的path
  • 基本的GUI系统。 不要实现整个Windows,而是像指针和button等基本的东西 – 保持基本
  • debugging组件显示FPS,精灵数量等

另外一件好事就是制作一些游戏,然后你会快速地看到你为每个游戏重复做了什么,然后研究如何将它们引入引擎。

  • 二维照明系统是一个很好的先进function。 你可以使用氪 。
  • 地图编辑器。 或者甚至更好的支持任何瓷砖地图格式,兼容“ 平铺地图编辑器 ”。 所以你可以使用Tiled。
  • 计划/定时器游戏行动。
  • 屏幕擦除效果,如翻页,淡出等,以在屏幕之间进行漂亮的转场。
  • build立视差的游戏层也是有用的。
  • 在游戏控制台中处理命令或脚本而不重新启动。
  • 轻松加载纹理地图集作为精灵或animation。

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

  • audiopipe理器 :一个简单的类来处理XNA中的背景音乐和声音效果。
  • videopipe理器 :这并不复杂,一个简单的类来处理video在XNA播放。
  • 特效经理 :负责绽放,模糊,黑/白等色彩等。

祝你好运 :)

瓦片重复工具。 允许用户添加/创build拼贴,并操纵边缘以获得平滑的重复图案。

根据目标游戏types,包括带有节点和边缘注释的导航图。 (对许多游戏都有好处,但对于使用2Dgraphics引擎制作的令牌侧滚动器不是那么有用)

  • 一个组件来生成它们(通过洪水填充algorithm)。
  • 一定要包括所有主要的path寻找/规划algorithm(A * / Dijkstra /等)来遍历这些图。

这样做的缺点是,你将不得不定义引擎的“映射”,这可能会限制引擎的用户。

相关的事情:

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

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

嗯。 这个列表是一个“内部”列表。 做出伟大的引擎是做出很好的“外部”列表。 以UE3为例 – 这是因为有很好的工具。 你需要创造世界的工具,创造最佳的资源包(它也应该在内部列表中;-)),用于碰撞对象规范等。另外,为了添加到有机猫的答案,你应该决定技术水平。 你可以去简单的精灵,或者你可以想要幻想的效果(所以着色器是必要的,与此你需要基础设施)