A menos que você esteja disposto a pagar US $ 10.000 por um devkit XBOX ou Playstation, o único console para o qual você pode desenvolver é o XBOX 360, e a única maneira de fazê-lo é com o XNA.
Para o desenvolvimento profissional, a menos que você realmente precise obter 100% do poder de processamento do XBOX (que a maioria dos jogos, especialmente os jogos 2D não precisam), o XNA, na minha opinião, é realmente muito melhor para o desenvolvimento.
Alguns erros que outros respondentes fizeram:
O XBOX possui apenas 3 núcleos. Você obtém acesso a todos eles com o XNA.
Cada núcleo possui hyperthreading e suporte para 2 hyperthreads. Você só tem acesso a 4/6 threads. Um desses threads é para o XNA. O outro é um segmento ao qual nenhum desenvolvedor de jogos tem acesso, pois é usado pelo sistema operacional XBOX.
O C # no XBOX é muito mais lento que o C # no Windows. O XBOX usa o .NET compact CLR, que é muito leve e carece de muitas das otimizações do CLR de desktop. Os recursos de segurança do XBOX impedem que os programas modifiquem seu próprio código-fonte. Isso dificulta muito a execução do código .NET, e muito menos a execução rápida . Parte do que torna o código gerenciado competitivo no desempenho com o código nativo C ++, é que o CLR pode modificar seu próprio código para otimizar a coerência do cache. A equipe de desenvolvimento do XNA precisa percorrer alguns grandes bastidores para conseguir que o C # seja executado no XBOX, e há um custo de desempenho associado a esses bastidores.
Você não fica muito preguiçoso com a alocação de memória. O XNA no Windows simplifica bastante a alocação de memória, como seria de esperar de um ambiente gerenciado. No entanto, no XBOX, o .NET compact CLR usa uma abordagem de varredura e compacta para a coleta de lixo, e a abordagem típica para evitar a gagueira no jogo devido a coleções é evitar coleções por completo. Isso requer o uso de conjuntos de objetos para suas classes e o uso de estruturas para objetos menores, onde você normalmente usa classes no ambiente Windows. O pool de objetos geralmente requer um modelo de gerenciamento de objetos alocado / livre, o que não é pior (e talvez um pouco melhor) que o gerenciamento de memória C ++.
Dito isso, o desenvolvimento em C # / XNA ainda é muitas vezes mais rápido e fácil do que o desenvolvimento em C ++ sem uma API DirectX (que é XNA).
Aqui está o status de um jogo que estou criando no XNA, após 4 semanas de trabalho:
Isso deve lhe dar uma noção de quão incrivelmente rápido o desenvolvimento com a biblioteca / API XNA está em combinação com C #.
Essa captura de tela é renderizada pelo XBOX a cerca de 65FPS.
Se você é um desenvolvedor de jogos amadores e deseja criar jogos para um console, o XNA + XBOX não é apenas a sua única opção realista, mas também uma opção incrível, um ambiente de desenvolvimento divertido e muitos jogos do XBOX Live Arcade. feito com o XNA e fez centenas de milhares de dólares fazendo isso. ( Limbo por exemplo.)