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


16

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

但是,我对Xbox领域很陌生。XNA是否仅用于业余爱好者开发,不建议用于半专业或企业应用程序开发?XNA是否缺少C ++开发的解决方案的功能,还是严重降低了Xbox上运行的游戏/应用程序的性能?

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

低级编程将直接在C ++中与DirectX一起使用。有什么优势?

Answers:


15

简短的回答:是的

XNA只是一个工具。它适合所有处理器和图形密集型游戏之外的所有游戏。如果您正在考虑将XNA用于Xbox 360游戏,那么您将错过以下内容:

  • 可以访问SIMD / Vector单元,以进行非常非常快的CPU浮点运算
  • 使用母语代码的能力可能会比C#快一点
  • 能力是一个有点有点懒惰随你怎么分配内存
  • XBLIG游戏只能访问6个核心中的4个(但是我们仍然拥有全部3个CPU,它们也不是全核心,因此我们不会错过太多)-不确定这是否适用于非XBLIG XNA游戏
  • 完全DirectX访问权限,可进行真正晦涩的图形欺骗

可能还有更多-这简直就是我的脑海。

(推测:如果您专业开发人员(例如:拥有devkit),我认为您可以将XNA与本机代码一起使用,与Windows上的P / Invoke相同。两者兼有。您必须询问Microsoft。另请参阅XDK。)

最重要的是,XNA游戏几乎与本地游戏一样快,并且可以完成几乎所有的工作。我建议您使用它,除非您找到令人信服的理由。

我不知道360是否有任何托管的DirectX。也许SlimDX是一个不错的起点。


1
什么是“ XBLIG”?
Ricket

2
Xbox Live独​​立游戏
点点

只有3个核心,我们可以使用所有这些核心。您无权访问2个线程。其中一个线程用于XNA,另一个线程在制作游戏时没有人可以访问,就像XBOX OS一样。
Olhovsky

1
另外,您不必对内存分配感到懒惰。除了非常简单的游戏外,您还必须池化所有对象(这涉及一个分配/自由类型模型-不比C ++好),以防止在.NET紧凑CLR上使用世代收集方法进行昂贵的垃圾收集。
Olhovsky

12

除非您愿意为XBOX或Playstation devkit支付10,000美元,否则您可以开发的唯一控制台是XBOX 360,并且唯一可以使用XNA的方法。

对于专业开发,除非您确实需要获得XBOX的100%的处理能力(大多数游戏,尤其是2D游戏不需要),那么我认为XNA实际上对于开发来说要好得多。

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

XBOX只有3个核心。您可以使用XNA访问所有这些文件。

每个内核都有超线程,并支持2个超线程。您只能访问4/6线程。这些线程之一是用于XNA。另一个是XBOX OS使用的线程,游戏开发人员无法访问。

XBOX上的C#比Windows上的C#慢得多。XBOX使用.NET紧凑型CLR,它非常轻巧,并且缺少许多桌面CLR的优化。XBOX安全功能可防止程序修改其自身的源代码。这甚至使.NET代码无法运行,甚至很难快速运行。使托管代码在性能上具有C ++本机代码竞争力的部分原因在于,CLR可以修改其自身的代码以优化缓存一致性。XNA开发团队必须跳过一些相当大的难题,才能使C#完全在XBOX上运行,并且这些难题会带来相关的性能成本。

您不必对内存分配太懒惰。正如您在托管环境中所期望的那样,Windows上的XNA大大简化了内存分配。但是,在XBOX上,.NET紧凑CLR使用清除和紧凑方法进行垃圾回收,而防止由于收集而导致游戏停顿的典型方法是完全避免收集。这要求为类使用对象池,为较小的对象使用结构,通常在Windows环境中使用类。对象池通常需要对象管理的分配/释放模型,这并不比C ++内存管理差(也许好一点)。

也就是说,与没有DirectX API(即XNA)的C ++开发相比,C#/ XNA的开发仍然快很多倍且更容易。

经过4周的工作,这是我在XNA中制作的游戏的状态:

开发4周后的游戏截图。

这应该使您了解使用XNA库/ API与C#结合进行快速开发的方式。

该屏幕截图由XBOX以大约65FPS的速度渲染。

如果您是业余游戏开发人员,并且想要为主机制作游戏,那么XNA + XBOX不仅是您唯一的现实选择,它还是一个非常了不起的选择,一个有趣的开发环境,并且许多XBOX Live Arcade游戏已经成为现实。用XNA制作,并赚了数十万美元。(例如Limbo。)


1
我对XNA开发人员最清楚的答案之一。谢谢。
凯尔2012年

4

XNA是双刃刀片;它相对易于使用,但可扩展性和可定制性。问题是,基于托管语言并具有紧凑的框架实现,从复杂的游戏中压缩某些性能可能会非常痛苦且令人沮丧。

您只能通过C#/ XNA或通过C ++ / DirectX部署到Xbox,但是第二种选择需要获得XBLA许可并支付devkit的费用,这可能非常昂贵(〜10000 $)。

请记住,Xbox是一个封闭的系统。忘记任何直接的TCP / IP交互,您只能与Xbox Live中存在的其他控制台进行通信!网络,则无法进行原始HTTP连接。

因此,如果您正在考虑一款游戏,请在需要更多原始功能(并且有足够的钱)的情况下尝试XNA并迁移到devkit。如果您正在考虑一个应用程序...只需针对另一个平台。


我不知道XNA和devkit有何不同……
Spooks

XNA是高级C#API。devkit是一个特殊的控制台,您可以在其中部署用C ++和DirectX编写的游戏,从而降低访问级别并提高整体性能。
r2d2rigo

所以..完全不同
惊吓
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.