¿XNA es bueno para el desarrollo profesional de Xbox 360?

16

Quiero comenzar a desarrollar para mi Xbox 360, y he oído hablar del marco XNA que puede apuntar tanto a la PC como a Xbox. Esto suena como una opción atractiva ya que mis clientes también pueden usar el juego / aplicación en computadoras normales.

Sin embargo, soy muy nuevo en la escena de Xbox. ¿XNA es solo para el desarrollo de aficionados y no se recomienda para el desarrollo de aplicaciones semiprofesionales o corporativas? ¿XNA carece de las capacidades de una solución desarrollada en C ++, o no reduce el rendimiento de un juego / aplicación que se ejecuta en Xbox?

¿Es posible apuntar a Xbox usando C # y sin XNA? ¿Cuáles son las ventajas?

La programación de bajo nivel estaría en C ++ trabajando directamente con DirectX. ¿Cuáles son las ventajas?

Robinicks
fuente

Respuestas:

15

La respuesta corta: .

XNA es solo una herramienta. Es adecuado para todos los juegos, excepto los más intensivos en procesadores y gráficos. Si está considerando XNA para un juego de Xbox 360, esto es lo que se perderá:

  • Acceso a la unidad SIMD / Vector para realizar cálculos de punto flotante de CPU muy, muy rápidos
  • Posibilidad de usar código de idioma nativo que probablemente sea un poco más rápido que C #
  • Capacidad para ser un poco más vago con la forma de asignar memoria
  • Los juegos XBLIG tienen acceso a solo 4 de los 6 núcleos (pero todavía obtenemos las 3 CPU, y tampoco son núcleos completos, por lo que no nos perdemos mucho), no estoy seguro de si esto se aplica a XNA no XBLIG juegos
  • Acceso completo a DirectX para hacer trucos gráficos realmente oscuros

Puede haber más, esto está fuera de mi cabeza.

(Especulación: si usted es un desarrollador profesional (como en: tiene un kit de desarrollo), creo que puede usar XNA con código nativo, igual que P / Invoke en Windows. Lo mejor de ambos mundos. Debería preguntarle a Microsoft. Ver también XDK .)

La conclusión es que un juego XNA es casi tan rápido como un juego nativo y puede hacer casi tantas cosas. Te sugiero que lo uses a menos que encuentres una razón convincente para no hacerlo.

No sé si hay algún tipo de DirectX administrado para el 360. Quizás SlimDX es un buen lugar para comenzar.

Andrew Russell
fuente
1
¿Qué es "XBLIG"?
Ricket
2
Juego indie Xbox live
dotminic
Solo hay 3 núcleos, y tenemos acceso a todos ellos. No tienes acceso a 2 hilos. Uno de esos hilos es para XNA, el otro es un hilo al que nadie tiene acceso al hacer juegos, como lo es para el sistema operativo XBOX.
Olhovsky
1
Además, no puede ser flojo con la asignación de memoria. Excepto para juegos muy simples, debe agrupar todos los objetos (que implica un modelo de asignación / tipo libre, no mejor que C ++) para evitar costosas recolecciones de basura en .NET compact CLR, que utiliza un enfoque de recolección generacional.
Olhovsky
12

A menos que esté dispuesto a pagar $ 10,000 por un dispositivo de Xbox o Playstation, entonces la única consola para la que puede desarrollar es la XBOX 360, y la única forma de hacerlo es con XNA.

Para el desarrollo profesional, a menos que realmente necesite obtener el 100% de la potencia de procesamiento de XBOX (que la mayoría de los juegos, especialmente los juegos 2D no necesitan), entonces XNA en mi opinión es mucho mejor para el desarrollo.

Algunos errores que otros respondedores han cometido:

El XBOX tiene solo 3 núcleos. Tienes acceso a todos ellos con XNA.

Cada núcleo tiene hyperthreading y soporte para 2 hyperthreads. Solo tienes acceso a 4/6 hilos. Uno de esos hilos es para XNA. El otro es un hilo al que ningún desarrollador de juegos tiene acceso, ya que es utilizado por el sistema operativo XBOX.

C # en XBOX es mucho más lento que C # en Windows. El XBOX utiliza el .NET compact CLR, que es muy liviano y carece de muchas de las optimizaciones de CLR de escritorio. Las características de seguridad de XBOX evitan que los programas modifiquen su propio código fuente. Esto hace que sea muy difícil incluso permitir que se ejecute código .NET, y mucho menos que se ejecute rápido . Parte de lo que hace que el código administrado sea competitivo en rendimiento con el código nativo de C ++, es que el CLR puede modificar su propio código para optimizar la coherencia de la caché. El equipo de desarrollo de XNA tiene que saltar a través de algunos aros bastante grandes solo para que C # se ejecute en XBOX, y hay un costo de rendimiento asociado con estos aros.

No puedes ser demasiado perezoso con la asignación de memoria. XNA en Windows simplifica enormemente la asignación de memoria, como cabría esperar de un entorno administrado. Sin embargo, en el XBOX, el .NET compact CLR utiliza un enfoque de barrido y compacto para la recolección de basura, y el enfoque típico para evitar la tartamudez en su juego debido a las colecciones, es evitar las colecciones por completo. Esto requiere el uso de grupos de objetos para sus clases, y el uso de estructuras para objetos más pequeños, donde normalmente usaría clases en el entorno de Windows. La agrupación de objetos generalmente requiere un modelo de asignación / libre de administración de objetos, que no es peor (y quizás un poco mejor) que la administración de memoria C ++.

Dicho esto, el desarrollo en C # / XNA sigue siendo muchas veces más rápido y fácil que el desarrollo en C ++ sin una API de DirectX (que es XNA).

Aquí está el estado de un juego que estoy haciendo en XNA, después de 4 semanas de trabajo:

Captura de pantalla del juego después de 4 semanas de desarrollo.

Eso debería darle una idea de cuán increíblemente rápido es el desarrollo con la biblioteca / API XNA en combinación con C #.

Esa captura de pantalla es procesada por XBOX a aproximadamente 65FPS.

Si eres un desarrollador de juegos de aficionados y quieres hacer juegos para una consola, XNA + XBOX no solo es tu única opción realista, también es una opción bastante sorprendente, un entorno de desarrollo divertido y muchos juegos XBOX Live Arcade han sido hecho con XNA, e hizo cientos de miles de dólares haciéndolo. ( Limbo por ejemplo).

Olhovsky
fuente
1
Una de las respuestas más claras que he tenido sobre XNA dev. Gracias.
keyle
4

XNA es una cuchilla de doble filo; Es relativamente fácil de usar, pero muy extensible y personalizable. El problema es que, al estar basado en un lenguaje administrado y tener una implementación regular de Compact Framework, exprimir un poco el rendimiento de un juego complejo puede ser muy doloroso y frustrante.

Solo puede implementar en su Xbox a través de C # / XNA o C ++ / DirectX, pero la segunda opción requiere calificar para una licencia XBLA y pagar el devkit, que puede ser muy costoso (~ 10000 $).

Y recuerda que la Xbox es un sistema cerrado. Olvídese de cualquier interacción directa TCP / IP, ¡solo puede comunicarse con otras consolas presentes en Xbox Live! red, y no puedes hacer conexiones HTTP sin procesar.

Entonces, si estás pensando en un juego, prueba XNA y muévete a un devkit si necesitas más potencia bruta (y tienes el dinero). Si está pensando en una aplicación ... solo apunte a otra plataforma.

r2d2rigo
fuente
Me pregunto cuán diferentes son XNA y el devkit ...
Spooks
XNA es una API de C # de alto nivel. Un devkit es una consola especial donde puede implementar juegos escritos con C ++ y DirectX, por lo que tiene un acceso de menor nivel y un mejor rendimiento general.
r2d2rigo
así que ... completamente diferente
Spooks