Monogame、SharpDX 和 XNA 有什么关系?

What's the deal with Monogame, SharpDX, and XNA?

我一直在研究用于创建游戏的好工具,并且遇到了 Monogame、Sharpx 和 XNA。我对每个问题都有一些疑问:

  1. 当我创建一个新的 windows 项目(宣称它使用 DirectX 12)时,代码模板如下所示:

    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    

我知道 Monogame 是 XNA 的重新实现,但是 "re" 部分在哪里?此代码显示使用 Microsoft 的 XNA 的 Monogame,甚至没有暗示使用 DirectX 12。

  1. SharpDX 具有使用 WinRT 的优势(我听说过),但这对我来说究竟意味着什么?我知道 SharpDX 是一个位于 DirectX 之上的层,允许它在 C# 中使用,自然应该使用 WinRT。 Monogame有什么借口不用WinRT?

我觉得我对某些事情感到困惑,想要弄清楚。请记住,我在这方面完全是菜鸟,任何有帮助的东西!

维基百科有几页介绍 XNA 的历史。简而言之,它不再受支持。 MonoGame 对其进行了扩展。 SlimDX 和 SharpDX 使用它们自己的 DirectX 包装器并且基本上是彼此的副本。最近 post SlimDX future 它不会继续。我不知道 MonoGame,但在 SharpDX 方面很强大,它提供了对 DirectX 12 的当前支持。如果你也想使用 OpenGL,你可以尝试 ANX,但我不知道。 SharpDX 人还写了一个 Collada class,它在 GitHub 上,还有一个兼容的 Assimp class。 None 上面有一个集成的物理系统,但是 .Net 的 PhysX 可以很好地与 SharpDX 一起工作。

总而言之,如果您只需要用于 C# 的 Direct X,那么 SharpDX 将是最直接的选择。如果您认为您可以扩展到其他平台,您可能想查看 MonoGame 或 ANX,但我不能保证其中任何一个。 None 上面提到的是完整的游戏引擎(例如 Unity 或 UE4),它们只允许使用 Visual Studio C# 本身不支持的功能,例如 DirectX。

MonoGame 确实是 XNA 的重新实现。它使用 Microsoft.Xna.Framework.* 命名空间来保持源代码与 XNA 项目的兼容性。 MonoGame 目前不支持 DirectX 12 - 桌面版有 DirectX 11 和 OpenGL 后端。

它为常见的游戏任务(加载内容、渲染、声音播放等)提供了简单的、跨平台类和构建运行时的管道-优化的内容文件。 MonoGame 对于大多数项目来说确实非常强大,并且非常适合快速开发,尽管它不是像 Unity 这样功能齐全的游戏引擎。由于它是在 XNA(几年前停产)之后建模的,因此大多数 XNA samples/tutorials 工作得很好。

SharpDX 是 DirectX 类型的低级包装器。只有当你想用低级管道弄脏你的手时,你才应该使用它,但事实并非如此。

MonoGame(用于经典 Windows、UWP 和 Windows 8 应用程序)的 DirectX 实现在内部使用 SharpDX 与 DirectX 通信。说到WinRT,只是"modern"Windows应用平台的一个实现细节