Answers:
简短的回答:是的。
XNA只是一个工具。它适合所有处理器和图形密集型游戏之外的所有游戏。如果您正在考虑将XNA用于Xbox 360游戏,那么您将错过以下内容:
可能还有更多-这简直就是我的脑海。
(推测:如果您是专业开发人员(例如:拥有devkit),我认为您可以将XNA与本机代码一起使用,与Windows上的P / Invoke相同。两者兼有。您必须询问Microsoft。另请参阅XDK。)
最重要的是,XNA游戏几乎与本地游戏一样快,并且可以完成几乎所有的工作。我建议您使用它,除非您找到令人信服的理由。
我不知道360是否有任何托管的DirectX。也许SlimDX是一个不错的起点。
除非您愿意为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中制作的游戏的状态:
这应该使您了解使用XNA库/ API与C#结合进行快速开发的方式。
该屏幕截图由XBOX以大约65FPS的速度渲染。
如果您是业余游戏开发人员,并且想要为主机制作游戏,那么XNA + XBOX不仅是您唯一的现实选择,它还是一个非常了不起的选择,一个有趣的开发环境,并且许多XBOX Live Arcade游戏已经成为现实。用XNA制作,并赚了数十万美元。(例如Limbo。)
XNA是双刃刀片;它相对易于使用,但可扩展性和可定制性。问题是,基于托管语言并具有紧凑的框架实现,从复杂的游戏中压缩某些性能可能会非常痛苦且令人沮丧。
您只能通过C#/ XNA或通过C ++ / DirectX部署到Xbox,但是第二种选择需要获得XBLA许可并支付devkit的费用,这可能非常昂贵(〜10000 $)。
请记住,Xbox是一个封闭的系统。忘记任何直接的TCP / IP交互,您只能与Xbox Live中存在的其他控制台进行通信!网络,则无法进行原始HTTP连接。
因此,如果您正在考虑一款游戏,请在需要更多原始功能(并且有足够的钱)的情况下尝试XNA并迁移到devkit。如果您正在考虑一个应用程序...只需针对另一个平台。