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).