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

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

XNA和C#DirectX有什么区别? C#DirectX与XNA(速度,版税等)有明显的优势吗?

两者如何比较速度非托pipeC ++的DirectX?

行业在游戏编程方面在哪里发展?

如果你真的擅长编写非托pipe代码,那么你可能会在DirectX之上编写一个更快的graphics引擎。 然而,对于业余爱好者来说,XNA在二维和三维游戏开发方面都有不俗的performance。

这里是一个很好的9频道video ,他们在Xbox 360上运行XNA制作的赛车游戏,即使在全高清时也能运行。 几个XBox Live Arcade游戏是由XNA社区开发的。

至于C#DirectX,据我所知,被调用的Managed DirectX已经不再被官方支持,因为XNA基本上取代了它。 我可能是错的,自从我看了很长一段时间。

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

Xna游戏工作室的重点是解决以游戏为中心的问题,但是我会质疑任何宣称Xna游戏工作室的性能比直接pipe理的X更差的海报,而没有看到一些体面的指标。

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

游戏界仍在大量使用C ++,但在XBox Live的社区游戏部分,使用XNA Game Studio以完全托pipe代码编写的游戏已经成功发布,并在XBox Arcade上发布。 应该有一些有趣的数据很快就会有人在社区游戏做了多less人。

许多全价游戏都使用C ++,但实际的游戏逻辑是类似于Lua,而Lua并不以速度而闻名!

C#有一个很好的学习曲线,被工业程序员使用 – 这将是一种有用的语言。 C ++将会是一门伟大的语言,但是它需要更多的纪律来创buildfunction性的代码 – 并且给了一个新的更多的东西来缠住自己。 C#可以在运行时dynamic更改并执行诸如展开循环之类的操作,而不是编译时间 – 好的C#可以比可读的C ++快或者更快,但是您必须知道如何使用它。 在非常严格的循环中,C ++和汇编可能在某些情况下胜出。 通常在使用C ++的游戏中,使用自己的内存策略创build自定义分配器,以尝试和帮助正常分配器导致的碎片……这种事情由CLR在.Net / C#中处理,只要您编程垃圾收集器的优点(和你自己的C ++实现一样),那么你就不必关心.Net中这样的低级实现细节。

如果你正在考虑进入游戏开发并决定一种语言(在这两行之间的阅读方式似乎是你所追求的地方),那么最好使用的语言就是你已经完成了的语言项目在结束时展示,无论是C ++,Objective C,C#,Flash,Silverlight等等。随着语言的变化和进退两难,招聘人员经常寻求对不同语言的掌握 – 这可能会减轻不知道他们正在使用的一个 – 和一个完成的工作组合将做到这一点。

  1. XNA和DirectX是非常不同的实现来解决同样的问题 – 高性能graphics密集编程。 两者都支持2D,3D,audio和networking组件。 只有在XNA是托pipe代码的情况下,DirectX才是非托pipe的。
  2. 有一个DirectX的托pipe实现,它是DirectX调用的一个包装,但是在当前版本之后没有得到更新,所以我不打扰它。
  3. XNA不是非托pipeDirectX的封装。 它使用DirectX的一部分,但它不是一个包装。
  4. 这个行业似乎仍然是非托pipeDirectX的 – 我说,因为所有主要的引擎公司仍然在C ++,ASM和支持DirectX(单独或与OpenGL的Linux / Mac版本结合)编码。 事实上,微软正在“放弃”DirectX托pipe包装,并告诉人们更愿意使用XNA,这是他们推动托pipe开发人员的地方。

目前看来,微软并不打算在Metro风格的应用程序中支持XNA。 XNA和现在弃用的“托pipeDirectX”的替代品是SharpDx 。 这可以用来创buildMetro风格的应用程序,并已经与XNA,SlimDX和windows API代码包进行了良好的基准testing 。