xna_logo.png [Télécharger Visual C# 2005 Express Edition] [Télécharger XNA Game Studio 1.0 Express Edition] [Télécharger le Service Pack 1 pour VC# 2005 EE] [TorqueX, de GarageGames.com] [XNA Resources] [Forum MSDN XNA Game Studio Express] [GameDev.Net - Plenty of 1s and 0s]

XNA, qu'est-ce que c'est ?

XNA est une plateforme de développement de logiciels multimédia basé sur une plateforme .NET allégée (compact .Net framework). Les logiciels développés sur la base de cette plateforme sont compatibles avec Windows (XP et Vista) et la console nouvelle génération de Microsoft, la XBox 360. La cible privilégiée de XNA est le secteur du développement de jeux vidéo, bien que XNA ne soit pas limité à ce seul type de programmes. XNA tire nombre de ses concepts de DirectX, l'API multimédia de Microsoft, et gère donc les graphismes en deux dimensions, en trois dimensions, le son, le réseau, et les entrées utilisateur (clavier, souris, manette de jeu).

Les outils indispensables

A l'heure actuelle, les outils de développement permettant de réaliser des programmes XNA ne sont officiellement compatibles qu'avec Windows XP, bien qu'il semblerait aussi qu'ils fonctionnent sous Windows Vista. De plus, la première itération de la plateforme a une portée relativement réduite, puisque seul le langage C# peut être utilisé - et tous les environnements de développement Microsoft ne permettent pas d'utiliser le framework simplement (bien que des solutions de contournement existent).

Pour développer un programme XNA, il faut :

  • un PC sous Windows XP équipé d'une carte graphique compatible DirectX 9.0c et équipé des pilotes de périphérique eux aussi compatibles avec cette version.
  • l'environnement de développement intégré Visual C# 2005 Express Edition - seule cette plateforme est officiellement supportée, mais certains utilisateurs ont réussi à utiliser la version Standard de cet EDI. Plus exactement, le Game Studio se base sur VC# 2005 EE, mais le framework lui-même n'est qu'un ensemble d'assemblies et devrait donc pouvoir être utilisé avec un autre environnement de développement. Notez tout de même que l'éditeur de contenu ne fonctionne qu'avec VC# 2005 EE. A noter qu'un service pack pour VC# 2005 EE a été publié par Microsoft.
  • l'outil XNA Game Studio 1.0 Express Edition, qui se greffe sur VC# 2005 EE et permet la création de projets XNA, la gestion des resources associées à ces projets et la liaison avec une console XBox 360 pour déboguer les programmes sur cette plateforme.
  • en option, vous pouvez aussi récupérer une ou deux manette XBox 360. Microsoft distribue des manettes qui sont compatibles Windows et XBox 360. Pouvoir brancher ces manettes sur un PC permet de raccourcir le cycle de développement/débogue en testant directement sur PC (au lieu d'attendre le transfert du programme et des données sur la console).
  • bien entendu, si vous souhaitez réaliser une programme pour la console XBox 360, il vous faudra aussi cette console et les cables qui vous permettront de la relier au PC.

Il existe en outre des produits permettant de simplifier la création d'applications XNA. Citons par exemple TorqueX (moteur 2D), de GarageGames, ou Karvonite (gestion de la persistance des données).

Développement pour PC

Développer un jeu qui cible le PC est simple, car peu de contraintes sont imposées au programmeur. Il a accès aux entrées utilisateur standard (souris, clavier) ainsi qu'à 4 manettes XBox 360, au système de fichier, etc.

La principale différence avec un développement de jeu normal tient au fait que le programmeur n'a pas à se soucier des possibilités de la carte graphique utilisée : XNA impose un standard minimum, ce qui rends plus aisé l'écriture de jeux ou d'applications multimédia, puisqu'il est inutile (ou presque) de se préoccuper des mécanismes de fall back nécessaire dans toute application DirectX ou OpenGL. Dans l'ensemble, la programmation d'une application est simplifiée par rapport à la programmation d'une application similaire en utilisant DirectX. Cependant, XNA étant basé sur DirectX, ce framework hérite d'un certain nombre des caractéristiques de son illustre ainé, et notamment de la gestion des lost devices.

Lorsqu'on programme une application en mode plein écran, le pilote de périphérique de la carte graphique le sait et optimise la gestion des ressources (textures, etc) en conséquence. Lorsque l'utilisateur minimise cette application, ou active une autre application en utilisant Alt+Tab, Windows reprends la main et bien évidemment, le contenu de la mémoire de la carte graphique peut changer. Afin de simplifier le travail du driver (qui aurait alors besoin de lire la mémoire de la carte graphique pour pouvoir effectuer une sauvegarde de ce qui s'y trouve), DirectX lui permet de ne pas se préoccuper de ce problème. Au lieu de ça, le driver marque la ressource "carte graphique" comme étant perdue pour l'application qui l'utilisait. Lorsque celle-ci est de nouveau activée, elle doit de nouveau télécharger les textures et autres données vers la carte graphique avant de pouvoir réinitialiser le système de rendu.

En C++, avec DirectX, c'est au programmeur de tester la valeur de retour de chacune des fonctions DirectX. Au cas ou l'une d'elle renvoie une erreur du type DEVICE_LOST, le programmeur doit alors libérer les ressources qu'il a créé, attendre que le driver soit de nouveau dans un état convenable puis recréer ses ressources avant de les télécharger vers la carte graphique. Cette opération est difficile et dangereuse - la moindre ressource oubliée lors de l'étape de libération et c'en est fini, car le driver ne retrouve jamais un état normal.

XNA a tout de même simplifié cette tâche - premièrement, ce n'est plus au programmeur de vérifier l'état du driver. Le framework gère cet état, et si il détecte une erreur DEVICE_LOST, il appelle une méthode de l'objet application pour libérer les ressources puis il appelle une autre méthode de la même classe pour les recréer. Le code de création des ressources et celui de libération sont aussi utilisé au moment de l'initialisation de l'application et au moment de la quitter. En rendant la gestion des ressources très locale, XNA simplifie la détection des erreurs qui empêcherait la réinitialisation du système de rendu.

De manière générale, XNA simplifie de beaucoup la création d'applications basées sur DirectX - un bon point.

Développement pour XBox 360

Hormis quelques différences, un programme XNA fonctionnant sur PC a toute les chances de fonctionner sur XBox 360 sans modification importante. Pour les points d'incompatibilité, des symboles pré-processeur définis permettent l'écriture de code ciblé PC ou XBox 360.

En fait, la principale différence entre le développement pour PC et le développement pour XBox tient à la nature de cette dernière. Une console est reliée à une télévision, et l'utilisateur de la console n'est pas installé à 50cm de son écran. Ces deux points sont important, car ils ont de sérieuses conséquences.

  • les résolutions d'écran des télévisions sont fixes, et dans la plupart des cas, elles sont relativement basses - sauf si il s'agit d'une TV HD.
  • tout l'écran d'une TV à tube cathodique n'est pas directement exploitable : il existe une zone invisible autour de la zone visible (appelée "title safe zone"). Il faut veiller à ne pas inscrire d'informations importante hors de la zone title safe, sans quoi l'utilisateur ne les verra pas. On peut considérer que la zone title safe représente 80 à 90% de la taille de l'écran virtuel sur lequel la console dessine.
  • l'utilisateur étant éloigné, il ne pourra pas voir les ptits détails, ni lire les textes trop petit. C'est ce que Microsoft appelle the 10-Foot Experience, un concept qu'il développe aussi bien pour Windows Media Edition que pour sa XBox 360.

Au niveau du développement lui-même, la seule différence majeure est que le jeu doit fonctionner avec une mémoire limitée (il n'y a pas de mémoire cache sur la XBox 360) et un espace disque limité (la taille du disque dur est limitée).

Pour tester et distribuer ses jeux sur XBox 360, il est nécessaire d'être abonné au service payant XNA Creator Club (49$ pour 4 mois, 99$ pour une année). Sans cet abonnement, il vous sera impossible de télécharger votre jeu vers votre console (la raison en est simple : si vous pouvez le faire, alors d'autres peuvent le faire aussi et vous pouvez vendre votre jeu. Or Microsoft entends garder le contrôle sur les jeux et applications distribuées sur sa console[1], pour deux raisons - l'une commerciale (Microsoft gagne pas ou peu d'argent sur la vente des consoles; en contrôlant le marché des logiciels liés à cette console, elle peut en tirer un substentiel bénéfice), l'autre ayant trait à la sécurité (éviter la prolifération de programmes qui peuvent diminuer la sécurité de la plateforme)).

A l'heure actuelle, il n'est pas possible de vendre un jeu Xbox développé avec XNA Game Studio Express Edition. Cela pourra changer dans le futur, notamment après la sortie prévue de la version Pro de cet environnement de développement. Microsoft autorise toutefois la vente ou la distribution sur PC de n'importe quel programme réalisé à l'aide du framework XNA, sans restriction d'aucune sorte, et sans royalties à payer.

Voilà, c'est tout pour cette fois - la prochaine sera un brin plus technique !

Notes

[1] Ce n'est pas propre à Microsoft. En fait, la stratégie de Microsoft est tout de même bien plus ouverte que celle de Sony ou Nintendo, qui interdisent tout bonnement tout développement non autorisé sur leurs consoles.