À moins que vous ne souhaitiez payer 10 000 $ pour un devkit XBOX ou Playstation, la seule console pour laquelle vous pouvez développer est la XBOX 360, et la seule façon de le faire est avec XNA.
Pour le développement professionnel, à moins que vous n'ayez vraiment besoin d'obtenir 100% de la puissance de traitement de la XBOX (dont la plupart des jeux, en particulier les jeux 2D n'ont pas besoin), alors XNA est en fait beaucoup mieux pour le développement.
Quelques erreurs que d'autres répondeurs ont faites:
La XBOX n'a que 3 cœurs. Vous avez accès à tous avec XNA.
Chaque cœur dispose d'hyperthreading et prend en charge 2 hyperthreads. Vous avez uniquement accès aux threads 4/6. L'un de ces fils est pour XNA. L'autre est un thread auquel aucun développeur de jeux n'a accès, car il est utilisé par le système d'exploitation XBOX.
C # sur la XBOX est beaucoup plus lent que C # sur Windows. La XBOX utilise le .NET compact CLR, qui est très léger et manque de nombreuses optimisations du CLR de bureau. Les fonctionnalités de sécurité XBOX empêchent les programmes de modifier leur propre code source. Il est donc très difficile d'autoriser même le code .NET à s'exécuter, et encore moins à s'exécuter rapidement . Ce qui rend le code managé compétitif en termes de performances avec le code natif C ++, c'est que le CLR peut modifier son propre code pour optimiser la cohérence du cache. L'équipe de développement XNA doit sauter à travers de très gros cerceaux juste pour que C # fonctionne sur la XBOX, et il y a un coût de performance associé à ces cerceaux.
Vous ne pouvez pas être trop paresseux avec l'allocation de mémoire. XNA sous Windows simplifie considérablement l'allocation de mémoire, comme vous pouvez vous y attendre d'un environnement géré. Cependant, sur la XBOX, le .NET compact CLR utilise une approche de balayage et compacte pour la collecte des ordures, et l'approche typique pour empêcher le bégaiement dans votre jeu en raison des collections, est d'éviter complètement les collections. Cela nécessite l'utilisation de pools d'objets pour vos classes et l'utilisation de structures pour des objets plus petits, où vous utiliseriez normalement des classes dans l'environnement Windows. Le regroupement d'objets nécessite généralement un modèle d'allocation / libre de gestion d'objets, ce qui n'est pas pire (et peut-être un peu mieux) que la gestion de la mémoire C ++.
Cela dit, le développement en C # / XNA est encore beaucoup plus rapide et plus facile que le développement en C ++ sans API DirectX (qui est XNA).
Voici l'état d'un jeu que je fais dans XNA, après 4 semaines de travail:
Cela devrait vous donner une idée de la façon dont le développement incroyablement rapide avec la bibliothèque / API XNA est en combinaison avec C #.
Cette capture d'écran est rendue par la XBOX à environ 65 images par seconde.
Si vous êtes un développeur de jeux amateur et que vous souhaitez créer des jeux pour une console, non seulement XNA + XBOX est votre seule option réaliste, mais c'est également une option assez incroyable, un environnement de développement amusant et de nombreux jeux XBOX Live Arcade ont été fait avec XNA, et fait des centaines de milliers de dollars en le faisant. ( Limbo par exemple.)