XNA和DirectX(C#)之间的比较

时间:2009-02-05 07:08:43

标签: c# directx xna

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

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

两者如何与速度非托管C ++ DirectX进行比较?

行业在游戏编程方面走向何方?

4 个答案:

答案 0 :(得分:52)

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

Here is a good Channel 9 video他们在Xbox 360上运行XNA构建的赛车游戏。即使在全高清时也能正常运行。 XNA社区开发了一些XBox Live Arcade游戏。

据我所知,就像C#DirectX一样,Managed DirectX被称为不再正式支持,因为XNA基本上取代了它。我错了,自从我看了它以来已经很长时间了。

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

答案 1 :(得分:31)

Xna游戏工作室的重点是解决以游戏为中心的问题,但我会质疑任何海报都说Xna游戏工作室的性能比管理直接x更差,而没有看到一些不错的指标。

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

该行业仍然大量使用C ++来实现游戏内容,但是在XBox Live的社区游戏部分使用XNA Game Studio以完全托管代码编写的游戏已成功发布,并在XBox Arcade上发布。很快就会有一些有趣的数据显示人们对社区游戏的贡献。

许多全价游戏都会使用C ++,但实际游戏逻辑就像Lua一样......而且Lua并不以超快的速度着称!

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

如果您正在寻求进入游戏开发并决定使用某种语言(在这些行之间进行阅读,那么最好使用的语言就是您所使用的语言)有一个完成的项目,在它的最后展示,无论是C ++,客观C,C#,Flash,Silverlight等。随着语言的变化和进出不受欢迎,招聘人员往往寻求对不同语言的成熟掌握 - 这可能减少不知道他们正在使用的那个 - 并且完成的工作组合将会这样做。

答案 2 :(得分:17)

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

答案 3 :(得分:5)

目前,微软似乎不打算在Metro风格的应用程序中支持XNA。 XNA的替代品和现在已弃用的“Managed DirectX”是SharpDx。这可用于创建Metro风格的应用程序,并且对XNA,SlimDX和Windows API代码包一直有利benchmarked