XNA est-il bon pour le développement professionnel de la Xbox 360?

16

Je veux commencer à développer pour ma Xbox 360, et j'ai entendu parler du cadre XNA qui peut cibler à la fois le PC et la Xbox. Cela semble être une option intéressante car mes clients peuvent également utiliser le jeu / l'application sur des ordinateurs normaux.

Cependant, je suis très nouveau sur la scène Xbox. XNA est-il uniquement destiné au développement amateur et n'est-il pas recommandé pour le développement d'applications semi-professionnelles ou d'entreprise? XNA n'a-t-il pas les capacités d'une solution développée en C ++, ou est-ce que cela réduit fortement les performances d'un jeu / d'une application fonctionnant sur Xbox?

Est-il possible de cibler la Xbox en utilisant C # et sans XNA? Quels sont les avantages?

La programmation de bas niveau serait en C ++ fonctionnant directement avec DirectX. Quels sont les avantages?

Robinicks
la source

Réponses:

15

La réponse courte: oui .

XNA n'est qu'un outil. Il convient à tous les jeux, sauf les plus gourmands en processeur et en graphisme. Si vous envisagez XNA pour un jeu Xbox 360, voici ce que vous allez manquer:

  • Accès à l'unité SIMD / Vector pour effectuer des calculs en virgule flottante CPU très, très rapides
  • Possibilité d'utiliser du code en langue native qui sera probablement un peu plus rapide que C #
  • Capacité à être un peu plus paresseux avec la façon dont vous allouez la mémoire
  • Les jeux XBLIG ont accès à seulement 4 des 6 cœurs (mais nous avons toujours les 3 processeurs, et ils ne sont pas non plus pleins, donc nous ne manquons pas grand-chose) - je ne sais pas si cela s'applique aux non-XBLIG XNA Jeux
  • Accès DirectX complet pour faire de la supercherie graphique vraiment obscure

Il pourrait y en avoir plus - c'est du haut de ma tête.

(Spéculation: si vous êtes un développeur professionnel (comme dans: avoir un devkit), je pense que vous pouvez utiliser XNA avec du code natif, comme P / Invoke sur Windows. Le meilleur des deux mondes. Vous devrez demander à Microsoft. Voir aussi XDK .)

L'essentiel est qu'un jeu XNA est presque aussi rapide qu'un jeu natif et peut faire presque autant de choses. Je vous suggère de l'utiliser sauf si vous trouvez une raison impérieuse de ne pas le faire.

Je ne sais pas s'il existe une sorte de DirectX géré pour le 360. Peut-être que SlimDX est un bon point de départ.

Andrew Russell
la source
1
Qu'est-ce que "XBLIG"?
Ricket
2
Jeu Xbox Live Indie
Dotminic
Il n'y a que 3 cœurs et nous avons accès à tous. Vous n'avez pas accès à 2 threads. L'un de ces threads est pour XNA, l'autre est un thread auquel personne n'a accès lors de la création de jeux, comme c'est le cas pour le système d'exploitation XBOX.
Olhovsky
1
De plus, vous ne pouvez pas être paresseux avec l'allocation de mémoire. À l'exception des jeux très simples, vous devez regrouper tous les objets (ce qui implique un modèle de type allouer / gratuit - pas mieux que C ++) pour éviter des récupérations coûteuses sur le CLR compact .NET, qui utilise une approche de collecte générationnelle.
Olhovsky
12

À 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:

Capture d'écran du jeu après 4 semaines de développement.

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

Olhovsky
la source
1
L'une des réponses les plus claires que j'ai eues sur XNA dev. Je vous remercie.
keyle
4

XNA est une lame à double tranchant; il est relativement facile à utiliser, mais très extensible et personnalisable. Le problème est qu'étant basé sur un langage managé et ayant une implémentation de Framework compacte, il peut être très douloureux et frustrant d'extraire certaines performances d'un jeu complexe.

Vous pouvez uniquement déployer sur votre Xbox via C # / XNA, ou via C ++ / DirectX, mais la deuxième option nécessite de se qualifier pour une licence XBLA et de payer pour le devkit, qui peut être très cher (~ 10000 $).

Et rappelez-vous que la Xbox est un système fermé. Oubliez toute interaction TCP / IP directe, vous ne pouvez communiquer qu'avec les autres consoles présentes sur le Xbox Live! réseau, et vous ne pouvez pas faire de connexions HTTP brutes.

Donc, si vous pensez à un jeu, essayez XNA et passez à un devkit si vous avez besoin de plus de puissance brute (et vous avez de l'argent). Si vous songez à une application ... ciblez simplement une autre plateforme.

r2d2rigo
la source
Je me demande à quel point XNA et le kit de développement sont différents ...
Spooks
XNA est une API C # de haut niveau. Un devkit est une console spéciale où vous pouvez déployer des jeux écrits avec C ++ et DirectX, ayant ainsi un accès de niveau inférieur et de meilleures performances globales.
r2d2rigo
donc .. complètement différent
Spooks