【问题标题】:What's the deal with Monogame, SharpDX, and XNA?与 Monogame、SharpDX 和 XNA 有什么关系?
【发布时间】:2016-06-18 20:27:47
【问题描述】:

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

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

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

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

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

我觉得我对某事感到困惑,想要弄清楚。请记住,我对这些东西完全是个菜鸟,有什么帮助!

【问题讨论】:

  • Monogame 是跨平台的,也适用于 Linux 和 OSX。没有 DirectX 的平台不足为奇,以至于您不会轻易看到它。支持 WinRT 没有什么特别复杂的,它以完全相同的方式公开 DirectX。 COM 的基于接口的编程范式的一大优势。 Monogame 也支持它。隐藏实现细节是此类库的重点。

标签: c# xna monogame sharpdx


【解决方案1】:

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

它为常见的游戏任务(加载内容、渲染、声音播放等)提供简单的跨平台类,并为构建运行时优化的内容文件提供管道。 MonoGame 对于大多数项目来说确实非常强大,并且非常适合快速开发,尽管它不像 Unity 那样功能齐全的游戏引擎。由于它是根据 XNA(几年前停产)建模的,因此大多数 XNA 示例/教程都可以正常工作。

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

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

【讨论】:

    【解决方案2】:

    维基百科有几页关于 XNA 的历史。简而言之,它不再受支持。 MonoGame 扩展了它。 SlimDX 和 SharpDX 使用自己的 DirectX 包装器,基本上是彼此的副本。通过最近的帖子SlimDX future 它不会继续。我不知道 MonoGame,但在 SharpDX 方面很强大,它提供了对 DirectX 12 的当前支持。如果你也想使用 OpenGL,你可以尝试 ANX,但我不知道。 SharpDX 家伙还在 GitHub 上编写了一个 Collada 类,并且有一个兼容的 Assimp 类。以上都没有集成的物理系统,但适用于 .Net 的 PhysX 可以与 SharpDX 配合使用。

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

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 2011-10-12
      • 1970-01-01
      • 2019-09-14
      相关资源
      最近更新 更多