XNA是否适合Xbox 360的专业开发?

我想开始为我的Xbox 360开发,我听说XNA框架可以同时针对PC和Xbox。 这听起来像一个有吸引力的select,因为我的客户也可以在普通电脑上使用游戏/应用程序。

不过,我对Xbox场景很陌生。 XNA仅适用于业余爱好者开发,是不是推荐用于半专业或企业应用程序开发? XNA是否缺乏C ++开发解决scheme的function,或者严重降低运行在Xbox上的游戏/应用程序的性能?

是否有可能使用C#而不使用XNA来定位Xbox? 有什么优势?

低级编程可以直接在C ++中使用DirectX。 有什么优势?

简短的回答: 是的

XNA只是一个工具。 它适用于除了大多数处理器和graphics密集型游戏之外的所有游戏。 如果你正在考虑Xbox 360游戏的XNA,你会错过的东西:

  • 访问SIMD / Vector单元来完成真正快速的CPU浮点运算
  • 使用本地语言代码的能力可能会比C#更快一些
  • 能够对分配内存的方式稍微懒散些
  • XBLIG游戏只能访问6个内核中的4个(但是我们仍然可以获得全部3个CPU,而且它们不是全内核,所以我们不会错过) – 不确定这是否适用于非XBLIG XNA游戏
  • 全面的DirectX访问,用于做非常模糊的graphics欺骗

可能还有更多 – 这是我的头顶。

(猜测:如果你一个专业的开发人员(例如:有一个开发工具),我认为你可以使用XNA和本地代码,就像Windows上的P / Invoke一样,这两个世界都是最好的。另见XDK 。)

底线是XNA游戏几乎和原生游戏一样快,可以做的东西几乎一样多。 我建议你使用它,除非你find一个令人信服的理由不要。

我不知道是否有任何types的360管理DirectX。也许SlimDX是一个很好的开始。

除非您愿意为XBOX或Playstation开发套件支付10,000美元,否则唯一可以开发的控制台是XBOX 360,而唯一可以做到这一点的方式就是使用XNA。

对于职业发展来说,除非你真的需要获得XBOX(大部分游戏,尤其是2D游戏所不需要的)的处理能力的100%,否则XNA在我看来实际上是更好的开发。

其他答复者所犯的一些错误:

XBOX只有3个内核。 你可以通过XNA访问所有的人。

每个核心都有超线程和支持2个超线程。 你只能访问4/6线程。 其中一个线索是XNA。 另一个是游戏开发人员无法访问的线程,因为它被XBOX OS使用。

XBOX上的C#比Windows上的C#慢得多。 XBOX使用.NET compact CLR,它非常轻便,缺less许多桌面CLR的优化。 XBOX安全function可以防止程序修改自己的源代码。 这使得甚至允许运行.NET代码非常困难,更不用说运行得更快 。 使得托管代码与C ++本机代码的性能竞争的一部分是CLR可以修改它自己的代码来优化caching一致性。 XNA开发团队必须跳过一些非常大的环节,才能使C#运行在XBOX上,而且这些环节的性能成本是相关的。

内存分配你不会太懒。 Windows上的XNA极大地简化了内存分配,正如您期望的托管环境一样。 但是,在XBOX上,.NET Compact CLR使用清理和紧凑的方式来进行垃圾收集,而避免由于集合而导致游戏中出现口吃的典型方法是完全避免收集。 这需要为你的类使用对象池,并使用小的对象的结构体,通常在Windows环境中使用类。 对象池通常需要一个分配/自由模型的对象管理,这不比C ++内存管理更糟糕(也许好一点点)。

也就是说,在没有DirectX API(XNA)的情况下,C#/ XNA的开发比C ++的开发要快很多。

下面是我在XNA工作4周后的一个游戏的状态:

开发4周后的游戏截图。

这应该让你了解XNA库/ API与C#结合如何快速的开发。

该屏幕截图由XBOX以大约65FPS呈现。

如果你是一个业余爱好者的游戏开发者,并且想为游戏机制作游戏,那么XNA + XBOX不仅仅是你的唯一select,它也是一个非常了不起的select,一个有趣的开发环境,许多XBOX Live Arcade游戏已经与XNA合作,并且做了数十万美元。 (例如Limbo )

XNA是一把双刃剑, 它使用起来相对简单,但可扩展性和可定制性。 问题在于,基于托管语言并具有如此紧凑的框架实现,从复杂的游戏中榨取一些性能可能是非常痛苦和令人沮丧的。

您只能通过C#/ XNA或通过C ++ / DirectX部署到您的Xbox,但第二个选项需要XBLA许可证的资格,并支付devkit,这可能是非常昂贵的(〜10000 $)。

请记住,Xbox是一个封闭的系统。 忘记任何直接的TCP / IP交互,你只能与Xbox Live中存在的其他控制台通信! networking,你不能做原始的HTTP连接。

所以,如果你正在考虑一个游戏,如果你需要更多的原始能量(你有钱),给XNA一个尝试,并转移到一个开发工具包。 如果你正在考虑一个应用程序…只是针对另一个平台。