好的,所以我最终基于 XNA 编写了自己的游戏引擎,我只是想知道我还需要什么来制作一个完整的引擎。
这是引擎中的内容:
- 物理学(Farseer 物理学)
- 粒子引擎(水星计划)
- 二维相机
- 输入处理
- 屏幕管理(菜单、暂停屏幕等)
- 精灵(动画,精灵表)
- 还有 XNA 的东西,比如 Sound。
我是否遗漏了任何可能对游戏引擎至关重要的东西?
你正在以一种颠倒的方式接近它。
您的引擎中应该包含以下内容:
所有在你的第一个游戏和第二个游戏中都被证明是通用的代码。
首先,写一个游戏。不要编写引擎,因为正如你所发现的,你不知道它应该包含什么,或者它应该如何设计。而是写一个游戏。
一旦你有了那个游戏,再写一个游戏。然后,当您完成该操作后,检查第二个游戏的代码。从第一场比赛中重复使用了多少?
任何被重用的东西都应该被重构到一个单独的项目中。该项目现在是您的游戏引擎。
这并不意味着你不应该计划,或者不应该尝试编写好的代码。但是请确保您正在朝着具体的方向努力,您可以在其中区分一个好的实现和一个坏的实现。一个好的游戏实现,是一个有效、有趣且不会崩溃的游戏。编写代码以首先实现这些目标。
一个好的引擎实现?这更棘手。什么是渲染器的好实现?一个人工智能框架?粒子系统?最终,确定您是否拥有一个好的引擎的唯一方法是查看它在实际游戏中的运行情况。因此,如果您没有游戏,就无法评估您的引擎。如果你无法评估你的引擎,你就无法判断你正在编写的任何代码是否真的有用。
您的引擎的主题或市场。如果您正在做超出基本图形引擎的任何事情,您将希望专注于您的引擎市场,例如 RPG、策略、解谜、平台游戏、动作或 FPS(好吧,不是 FPS)。
这将帮助您指出您需要前进的方向,以便在不询问我们的情况下进一步增强引擎。像虚幻引擎这样的引擎可以做很多事情,但它往往做得最好的是它的用途,即 FPS 游戏。同样,您应该定制您的引擎,使其适合特定的兴趣领域,因此适合该类型的游戏玩法。
您可以在一定程度上使其通用,但要意识到您的引擎越通用,编程就越难,无论是时间还是技能方面。如果有更具体的平台可用,其他程序员也不太可能选择通用引擎(除非仅此而已)。或者只编写自己的,因为修改通用引擎与创建自己的引擎一样难。
还有几件事:
几个想法:
我认为您涵盖了 2D 引擎的一般要求。我在该列表中唯一会错过的是:
还使开发过程更容易:
您还可以在 XNA 现有的东西之上添加另一层:
最后,您可能会添加一些“ready2use”着色器。或许可以从已停产的FaceWound(来自“Garry's Mod”开发者)那里获得一些灵感。
这取决于游戏,但通常需要的另一件事是良好的网络框架。
许多现代游戏,包括 2D 游戏,似乎都有某种形式的网络。
制作一些游戏也是一件好事,然后你会很快看到你为每款游戏重复做的事情,然后研究如何将其放入引擎中。
干得好,我们(我和我的一些朋友)实际上也在开发游戏引擎,我们已经得到了你提到的所有内容,但此外我们还有以下内容。
祝你好运 :)
3d Acceleration 应该在 2D 引擎中。
使用当今大多数人拥有的 3D 硬件是为您的 2D 游戏获得惊人性能的最佳方式......
良好的碰撞检测非常有帮助。如果你有效地实现它,它确实减少了每一帧所需的时间。除此之外,在我的引擎(用于 Pygame)中,我有一种将主屏幕分成多个子屏幕的方法,我觉得这很有用。
根据目标游戏类型,包括带有节点和边缘注释的导航图。(适用于许多游戏,但不适用于使用 2D 图形引擎制作的令牌侧滚轮)
这样做的缺陷是您必须定义引擎的“地图”是什么,这可能会限制引擎的用户。
相关事项:
首先要包含的最有用的东西是轻松使用引擎的工具。也许使用您的引擎来创建工具。我相信你会发现很多这样的缺陷。
简单的像素完美碰撞检测。不是先知物理学。简单的绘图例程,如drawline,drawcircle等。
瓷砖重复工具。允许用户添加/创建图块并操纵边缘以获得平滑重复图案的东西。
嗯。这个列表是一个“内部”列表。做伟大的引擎就是做伟大的“外部”清单。以 UE3 为例——它之所以出现,是因为有很棒的工具。您需要用于创建世界的工具,创建最佳资源包(它也应该在内部列表中;-)),用于碰撞对象规范等。另外,要添加到Organiccat 答案,您应该决定技术水平。您可以选择简单的精灵,也可以想要花哨的效果(因此需要着色器,并且需要基础设施)