A meno che tu non sia disposto a pagare $ 10.000 per un XBOX o un devkit Playstation, l'unica console che puoi sviluppare è l'XBOX 360, e l'unico modo per farlo è con XNA.
Per lo sviluppo professionale, a meno che tu non abbia davvero bisogno di ottenere il 100% della potenza di elaborazione di XBOX (di cui la maggior parte dei giochi, in particolare i giochi 2D non hanno bisogno), XNA secondo me in realtà è molto meglio per lo sviluppo.
Alcuni errori che altri risponditori hanno commesso:
L'XBOX ha solo 3 core. Puoi accedere a tutti loro con XNA.
Ogni core ha hyperthreading e supporto per 2 hyperthreads. Puoi accedere solo a 4/6 thread. Uno di quei thread è per XNA. L'altro è un thread a cui nessuno sviluppatore di giochi ha accesso, poiché viene utilizzato dal sistema operativo XBOX.
C # su XBOX è molto più lento di C # su Windows. L'XBOX utilizza il CLR compatto .NET, che è molto leggero e privo di molte delle ottimizzazioni del CLR desktop. Le funzionalità di sicurezza di XBOX impediscono ai programmi di modificare il proprio codice sorgente. Ciò rende molto difficile persino consentire l'esecuzione del codice .NET, tanto meno l'esecuzione rapida . Parte di ciò che rende il codice gestito competitivo nelle prestazioni con il codice nativo C ++, è che il CLR può modificare il proprio codice per ottimizzare la coerenza della cache. Il team di sviluppo di XNA deve saltare attraverso alcuni cerchi piuttosto grandi solo per far funzionare C # sull'XBOX, e c'è un costo di prestazioni associato a questi cerchi.
Non devi essere TROPPO pigro con l'allocazione di memoria. XNA su Windows semplifica notevolmente l'allocazione della memoria, come ci si aspetterebbe da un ambiente gestito. Tuttavia, su XBOX, il CLR compatto .NET utilizza un approccio ampio e compatto alla garbage collection, e l'approccio tipico per prevenire la balbuzie nel gioco a causa delle raccolte è di evitare del tutto le raccolte. Ciò richiede l'utilizzo di pool di oggetti per le classi e l'utilizzo di strutture per oggetti più piccoli, in cui normalmente si utilizzano le classi in ambiente Windows. Il pooling di oggetti richiede generalmente un modello allocato / libero di gestione degli oggetti, che non è peggio (e forse un po 'meglio) della gestione della memoria C ++.
Detto questo, lo sviluppo in C # / XNA è ancora molte volte più veloce e più facile dello sviluppo in C ++ senza un'API DirectX (che è XNA).
Ecco lo stato di un gioco che sto realizzando in XNA, dopo 4 settimane di lavoro:
Ciò dovrebbe darti un'idea di quanto lo sviluppo incredibilmente veloce con la libreria / API XNA sia in combinazione con C #.
Quel screenshot è reso dall'XBOX a circa 65FPS.
Se sei uno sviluppatore di giochi per hobby e vuoi creare giochi per una console, non solo XNA + XBOX è la tua unica opzione realistica, ma è anche un'opzione piuttosto sorprendente, un divertente ambiente di sviluppo e molti giochi XBOX Live Arcade sono stati fatto con XNA e fatto centinaia di migliaia di dollari facendolo. ( Limbo per esempio.)