【问题标题】:What Should Be in a 2D Game Engine? [closed]2D 游戏引擎应该包含什么? [关闭]
【发布时间】:2010-10-19 03:22:18
【问题描述】:

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

这是引擎中的内容:

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

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

【问题讨论】:

  • 没有反对 SO,但您最好将其发布在 gamedev.net 论坛上。
  • 良好(灵活)的碰撞检测。
  • 碰撞检测位于 Farseer Phsyics 引擎中
  • 你想写游戏还是引擎? (见:scientificninja.com/advice/write-games-not-engines
  • @clintp - cmets 不是发布问题回复的地方。

标签: c# xna


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

  • 看它的方式多么美好而简单,jalf (+1)!那就是说;我敢肯定,当您开始创建两个游戏中的第一个时,您会想要一个“基本功能”列表(取决于您制作的游戏类型)。
  • @Leif:为什么?如果这些功能是基本的,那么无论如何您都必须在某个时候添加它们,所以等到需要它们时再添加它们并没有什么坏处。谁知道呢,也许它们毕竟不是那么基本。也许你最终会得到一个没有这些的完整游戏
  • 我知道这在某些情况下是如何有意义的,但如果不以某种方式定义所需的工作,可能很难对“整体完整性”、未来的工作和您的进度有一种可靠的感觉。达到你的目标。我认为尝试制定计划总是一件好事,然后,人们可以优先考虑并将工作分成分隔的部分。如果做得好,我认为“计划”可以作为一个重要的参考点和激励因素,即使你随着产品需求的变化而做出改变。根据我的经验,“隐式计划”已被证明会适得其反。
  • @Leif:当然,但正是出于这个原因,我们的计划应该是创建游戏,而不是引擎。当我问“在我的引擎完成之前我需要什么”时,答案是“呃,好吧,呃,这取决于”。引擎中可能需要也可能不需要一百万种功能,并且您认为完成的功能的一百万种方式实际上在实践中不起作用,因为您忘记了一些微妙的要求。但如果你问“在我的游戏完成之前我需要什么”,答案就简单多了:我需要能够移动和跳跃,以及追踪敌人的生命值。
  • 无论如何都要计划,只是针对具体的东西进行计划,而不是“引擎”的抽象而蓬松的概念。计划中的重要一点是,您可以看到已完成的工作和剩下的工作。只有当您可以评估每个项目的“完成度”时,这才是可能的。在引擎中,我无法验证“渲染雾”功能是否实际完成。它会在我的游戏中工作吗?是否足够高效?我不知道,直到我有比赛。但是如果我把这个功能作为游戏的一部分,那么我只需要运行 ganme,我就可以看到这个功能是否完成了。
【解决方案2】:

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

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

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

【讨论】:

  • +1 以虚幻引擎为例:最后的遗迹。伟大的游戏(RPG),但图形在你不相信的地方是如此的丰满。这一切都源于这样一个事实,即 RPG 与 FPS 相比,往往会同时产生更多漂亮的效果,因此当同时出现多种效果时,需要在粒子引擎中进行更好的降级!
【解决方案3】:

还有一些事情:

  • 路径查找 - 对 AI 非常有用
  • AI - 可能 - 取决于您希望引擎的通用程度。
  • 高分
  • 回放 - 让高分变得更加有趣,因为您可以实际观看它们。

【讨论】:

  • 您知道任何用于路径查找的优秀 XNA/C# 库吗?还是您只是建议阅读所涉及的算法并创建适用于特定游戏的解决方案?
  • 我从来没有用过 XNA,所以我真的不知道有什么好的库。我确信已经有很多很棒的算法了,但有时最好阅读一下算法并自己实现它。
  • @Venesectrix:寻路(A* 是最流行的算法)实现起来非常简单,并且有大量资源。有关 XNA 相关的内容,请参阅 ziggyware.com/readarticle.php?article_id=162
【解决方案4】:

几个想法:

  • 人工智能(也许只是简单的 AI 实用程序,例如 pathfinding algorithms
  • 保存全部或部分游戏状态(用于暂停和稍后重新启动或保存高分)。

【讨论】:

  • 通用游戏引擎的 AI 有点困难。 AI 对实际游戏来说太具体了,所以我不确定尝试创建一个作为引擎本身一部分的通用游戏会有多大用处。
  • 我更多地考虑简单的 AI 算法(比如总是向你移动的敌人)以及实用程序(即寻路算法)。
  • +1:非常好的 a* 教程。感谢分享。
【解决方案5】:

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

  • 图形用户界面库

也使开发过程更容易:

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

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

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

【讨论】:

    【解决方案6】:

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

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

    【讨论】:

      【解决方案7】:
      • 动画框架,这样您就可以说:拿这个精灵,朝这个方向移动,使用这个速度、加速度等沿着这个路径前进
      • 基本的图形用户界面系统。不要实现整个 Windows,而是实现指针和按钮等基本功能 - 保持基本功能
      • 用于显示 FPS、精灵数量等的调试组件

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

      【讨论】:

        【解决方案8】:
        • 2d 照明系统是一个很好的高级功能。为此,您可以使用 Krypton
        • 地图编辑器。甚至更好地支持任何与“Tiled Map Editor”兼容的瓦片地图格式。所以你可以只使用 Tiled。
        • 游戏动作的调度器/计时器。
        • 屏幕擦除效果,例如翻页、淡出等,以在屏幕之间进行漂亮的过渡。
        • 内置视差的游戏层也很有用。
        • 在游戏控制台中无需重启即可处理命令或脚本。
        • 将纹理图集轻松加载为精灵或动画。

        【讨论】:

          【解决方案9】:

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

          • audio manager:一个简单的类来处理背景音乐和声音 XNA 中的效果。
          • 视频管理器:不复杂,一个简单的视频处理类 在 XNA 中演奏。
          • 效果管理器:负责诸如绽放、模糊、 黑/白颜色..等。

          祝你好运:)

          【讨论】:

            【解决方案10】:

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

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

            【讨论】:

            • 你有一个例子说明这是如何发生的吗?
            • Xna 已经使用 3d acc。所以这是自动内置的。实际上这只是意味着它使用 gpu - 据我了解
            • 确实,XNA Sprites 已经通过 3D 加速完成了,所以你不必担心这个。
            • 如前所述,使用 XNA。当然,您总是可以将 sprite 视为垂直于屏幕且带有一些 alpha 的表面上的纹理。以这种方式做事意味着您几乎可以免费获得缩放和旋转,以及大量的硬件加速。
            【解决方案11】:

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

            【讨论】:

              【解决方案12】:

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

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

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

              相关的事情:

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

              【讨论】:

                【解决方案13】:

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

                【讨论】:

                  【解决方案14】:

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

                  【讨论】:

                    【解决方案15】:

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

                    【讨论】:

                      【解决方案16】:

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

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2016-02-10
                        • 2013-01-04
                        • 1970-01-01
                        • 1970-01-01
                        • 2020-01-17
                        • 1970-01-01
                        相关资源
                        最近更新 更多