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?
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:
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).
fuente
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.
fuente