【问题标题】:Comparison between XNA and DirectX (C#)XNA 和 DirectX (C#) 之间的比较
【发布时间】:2010-10-05 14:50:55
【问题描述】:

在 PC 开发方面(不包括 Xbox 和 Zune),

XNA 和 C# DirectX 有什么区别? C# DirectX 是否比 XNA 具有显着优势(在速度、版税等方面)?

两者与速度非托管的C++ DirectX相比如何?

游戏编程行业的发展方向是什么?

【问题讨论】:

    标签: c# directx xna


    【解决方案1】:

    如果您真的擅长编写非托管代码,那么您可能能够在 DirectX 之上编写更快的图形引擎。然而,对于业余爱好者来说,XNA 在 2D 和 3D 游戏开发方面具有大量的性能。

    Here is a good Channel 9 video 他们在 Xbox 360 上运行 XNA 构建的赛车游戏。即使在全高清下也运行良好。 XNA 社区已经开发了一些 Xbox Live Arcade 游戏。

    就我记得的 C# DirectX 而言,所谓的托管 DirectX 不再受到官方支持,因为 XNA 基本上取代了它。我可能是错的,我已经很久没有看到它了。

    XNA 和托管 DirectX 之间的性能差异可以忽略不计,因为本质上它们是相同的; XNA 只是有一些方便的位来减少您需要编写的样板代码量。

    【讨论】:

      【解决方案2】:

      Xna 游戏工作室的东西专注于解决以游戏为中心的问题,尽管我会质疑任何海报说 Xna 游戏工作室的东西的性能比托管直接 x 更差,而没有看到一些体面的指标。

      MS 之外的一个独立小组创建了一个名为 SlimDx 的项目 - http://slimdx.mdxinfo.com/ 如果您正在编写应用程序而不是游戏(我希望您不会被其他问题所困扰),那么这可能值得考虑。

      该行业仍然大量使用 C++ 开发游戏内容,但已经成功发布了使用 XNA Game Studio 在 XBox live 的社区游戏部分使用完全托管代码编写的游戏,并在 XBox Arcade 本身上发布。应该很快就会有一些关于人们在社区游戏中赚了多少的有趣统计数据。

      许多全价游戏在某些方面使用 C++,但在实际游戏逻辑方面则使用 Lua 之类的东西……而 Lua 并不以超快的速度着称!

      C# 具有良好的学习曲线,并且被行业中的工具程序员使用 - 这将是一种有用的语言。 C++ 将是一门很棒的语言,但它需要更多的纪律来创建功能代码 - 并为新人提供了更多的绳索来吊死自己。 C# 可以在运行时而不是编译时动态更改和执行诸如展开循环之类的事情 - 好的 C# 可以与好的可读 C++ 一样快或更快 - 但你必须知道如何使用它。在非常紧密的循环中,C++ 和汇编程序可能会在某些情况下胜出。通常在使用 C++ 的游戏中,自定义分配器是使用自己的内存策略创建的,以尝试帮助由正常分配器引起的碎片......这种事情由 .Net/C# 中的 CLR 处理,只要你编程到垃圾收集器的优势(与您自己的 C++ 实现相同),那么您不必担心 .Net 中如此低级的实现细节。

      如果您正在考虑进入游戏开发并决定选择一种语言(哪种语言,字里行间的阅读似乎是您使用该行提问的地方),那么最好使用的语言就是您使用的语言有一个完成的项目要在最后展示,无论是 C++、目标 C、C#、Flash、Silverlight 等。随着语言的变化和流行和失宠,招聘人员通常会寻找经过验证的对不同语言的掌握程度——这可能减少不知道他们当前正在使用的那个 - 并且完成的工作组合可以做到这一点。

      【讨论】:

      【解决方案3】:
      1. XNA 和 DirectX 是解决相同问题的完全不同的实现方式 - 高性能图形密集型编程。两者都支持 2D、3D、音频和网络组件。 DirectX 仅在 XNA 是托管代码的情况下是非托管的。
      2. 有一个 DirectX 的托管实现,它是 DirectX 调用的包装器,但在当前版本之后没有更新,所以我不会打扰它。
      3. XNA 不是非托管 DirectX 的包装器。它确实使用了 DirectX 的一部分,但它不是包装器。
      4. 行业似乎仍然非常关注非托管 DirectX - 我这么说是因为所有主要的引擎公司仍在使用 C++、ASM 进行编码并支持 DirectX(单独或与 Linux/Mac 版本的 OpenGL 结合使用)。微软正在“放弃” DirectX 托管包装器并告诉人们宁愿使用 XNA,这表明他们正在推动托管开发人员。

      【讨论】:

      • 嗯,什么? XNA - 是一个包装器。
      • 不,不是 - 如果您需要澄清,请参阅 xnarocks.spaces.live.com/blog/cns!CDFDED0A2593C8E1!172.entry。只是给出一个快速示例包装器 1:1 函数映射。 XNA 2.0 中的管道内容如何映射到 DirectX?它没有。它不是包装器。
      • +1,XNA 是在 DirectX 之上编写的更高级别的托管代码游戏库。对于很多事情,它甚至不使用 DirectX 类/结构,而是使用它自己的,最值得注意的是矩阵、向量和其他一些......
      【解决方案4】:

      目前,微软似乎不打算在 Metro 风格的应用程序中支持 XNA。 XNA 和现已弃用的“托管 DirectX”的替代方案是 SharpDx。这可用于创建 Metro 风格的应用程序,并且在 XNA、SlimDX 和 windows API 代码包方面得到了很好的benchmarked

      【讨论】:

        猜你喜欢
        • 2011-03-09
        • 2015-03-11
        • 1970-01-01
        • 1970-01-01
        • 2021-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-27
        相关资源
        最近更新 更多