es   fr   de  

Software-Conférences Lefthand Software-Wydawnictwo


E-mail:
                               

XNA


XNA
GAME STUDIO EXPRESS - Création de jeux à la portée de tous

Combien d'entre vous n'ont jamais revé de pouvoir créer leurs propres jeux ? Et de le faire évidemment avec un outil simple et souple ? Ceux qui se sentent concernés par les deux questions précédentes tombent à pic : le 30 août, Microsoft a publié un outil qui va changer la façon de créer des jeux, j'ai nommé XNA Game Studio Express.


Cet article explique :

  • XNA et XNA Game Studio Express.

  • Les classes essentielles et nécessaires pour le développement des jeux.


Ce qu'il faut savoir :

  • Bonnes connaissances de C# et de l'architectu­re .NET 2.0.

  • Savoir utiliser Visual C# Express.







Le développement de jeux est sans doute l'un des défis les plus intéressants sur les­quels peut tomber un développeur : non seulement à cause du grand nombre de compétences qui sont en jeu, mais aussi parce que cela fait travailler conjointement des développeurs, des graphistes, des dessinateurs 3D, des départements spécialisés en audio ou vidéo, des producteurs, etc., tout en n'oubliant pas qu'en fonction du genre de jeu a développer, nous avons aussi souvent besoin de connaissances en mathématiques, physique et même intelligence artificielle. Comme souvent, il y a des exceptions pour confirmer la regle et il existe donc des jeux qui ont fait un tabac sans être techniquement très pointus : l'exemple type est Tetris ou Arkanoid (duquel se sont inspirés un bon nombre d'autrès jeux) qui sans avoir eu recours à des pointures en technique ou en graphisme ont été des révolutions au moment de leur apparition. Cette situation est visible sur la Figure 1.





Figure 1. Sous-systems nécessaires à la création d'un jeu vidéo


Nous voyons donc qu'en général, tout néophyte motivé qui désire se lancer dans la création de jeux vidéos devra passer un bon nombre d'heures à se former avant de pouvoir finalement écrire une petite application qui soit quelque peu intéressante. Et c'est la qu'entre en jeu le tout dernier outil de Microsoft, XNA Game Studio Express, qui va permettre à Microsoft de tenter de faire son entrée dans le développement des jeux vidéos pour le grand public. Il faudra quand même que ce public ait quelques no­tions de programmation ! Mais Microsoft n'est pas le premier à faire ce genre de tentatives : par le passé, nous avons eu par exemple DarkBasic, sa version prfessionnelle DarkBasic Professional, ou encore Gamemaker ; ou si nous remontons encore plus dans le temps, nous avons aussi 3D Construction Kit. Alors, est-ce que Microsoft a-t-il enfin conçu l'outil parfait ? Depuis l'annonce de la disponibilité de cet outil lorsde la conférence des Développeurs de Jeux en Mars 2004 à San José, beaucoup d'eau est passé sous les ponts, et nous avons été nombreux a nous interroger sur les possibilités réelles que proposerait cet outil. Cet article vous donnera toutes les clés et pistes nécessaires à cette question.


Qu'est ce que XNA GameStudio Express ?


En fait, cette derniêre serait plutôt a exprimer de la manière suivante : qu'est que XNA, étant donné que XNA Game Studio Express n'est rien d'autre qu'un outil de développement écrit en Vi­sual C# Express permettant la création d'applications XNA. Reformulons donc la question : qu'es donc XNA ? Derrière XNA se cache un ensemble d'outils facilitant la création et le développement de jeux vidéo mutiplateforme. Oui, vous avez bien lu : mutiplateforme ! Vous pouvez donc, avec le même outil, créer aussi bien des jeux pour PC, XBOX, ou tout autre équipement qui soit basé sur Windows. Et n'essayez pas de savoir de quoi sont les initiales XNA, étant donné que c'est l'acronyme de ... rien ! Si XNA Game Studio Express ne permet à l'heure actuelle que la création de jeux sous PC, il faut quand même souligner que nous sommes sur une version bêta et qu'il sera possible dans les versions ultérieures de créer des jeux pour Xbox 360… à condition de payer $99/an pour apparte­nir au club des créateurs, ou alors $49 pour 4 mois (nous détaillerons plus loin quelques restrictions supplémentaires pour XBOX). D'un autre côté il est prévu prochainement (nous n'avons pas de date de sortie exacte à notre connaissance mais le printemps 2007 est officieusement murmuré) la publication de XNA Game Studio en version professionnelle, basée sur Visual Studio 2005 Team System et intégrant toutes les fonctionnalités de développement de XNA Game Studio Express (et quelques autrès en plus), ainsi que tous les outils de gestion d'équipes ce qui facilitera le travail entre créateurs de contenu, programmeurs, directeurs, producteurs et testeurs de jeux. Et il va sans dire que XNA Game Studio ne sera pas gratuit.


Au travers de XNA, Microsoft poursuit sa politique de mettre gratuitement à disposition des outils permettant aussi à n'importe quel personne enthousiasmée d'explorer ce qu'il souhaite de ses produits, qu'a des entreprises et des professionnels du secteur d'utiliser ces outils en version beaucoup plus approfondie. Apres avoir explicité le point précédent, ci-dessous quelques caractéristiques importantes qu'il ne faut pas oublier de XNA :


  • Il est conçu avec NET 2.0 et le code que nous allons créer sera donc du code géré, même si la CLR (Common Language Runtime) intégrée a été optimisée ;

  • Dispose d'un large éventail de librairies de classe spécifiques au développement de jeux vidéo ;

  • Permet la réutilisation de code entre plateformes distinctes ;

  • Il sera disponible sous Windows XP, Windows Vista et XBOX 360, et étant donné que les applications seront créées pour la plateforme XNA, n'importe quel jeu créé sous la plateforme s'exécutera sur n'importe quelle autre machine sans pour autant devoir apporter de grosses modifications ;

  • La version bêta de XNA Game Studio Ex­press actuellement disponible ne tourne que sous Windows XP SP2 ;

  • Le langage de programmation sera en tout cas C#.


XNA Game Studio Express integre, entre autrès, deux éléments essentiels :


  • XNA Framework, nom donné aux librairies de code gérées crées pour le développement de jeux afin d'obtenir une productivité maximale aussi bien sous Windows que sous Xbox 360 ;

  • XNA Framework Content Pipeline, qui est un ensemble d'outils permettant aux développeurs d'intégrer facilement du contenu 3D dans leurs applications.


De plus, pour ceux d'entre vous qui sont intéressés par le développement sous la 360, il y a les quelques petites restrictions suivantes, qui peu­vent se résumer par 4 points principalement.


Tous ceux qui désirent partager leurs jeux doivent accéder a Xbox Live et avoir une souscription valide au Club de Créateurs de XNA, L'utilisateur destinataire de l'application développée avoir au préalable téléchargé l'environnement d'exécution du Framework XNA pour Xbox 360. Il doit aussi avoir téléchargé XNA Game Studio Express sur son PC de développement. Le projet du jeu, avec tous les codes source, devra etre partagé avec l'utilisateur récepteur, qui compilera et déploiera l'application sur sa propre Xbox 360.Regardez la Figure 2.





Figure 2. Depuis XNA Game Studio Express, différents types de projets sont disponibles


Commençons par le début


La premiere chose a faire pour développer avec XNA Game Studio Express est de télécharger sur le site de Microsoft tous les logiciels nécessaires et de les installer sur notre poste. Ces logiciels sont les suivants :


  • Microsoft .NET Framework 2.0 ;

  • DirectX Software Development Kit, version d'aout 2006 (nous n'en aurons besoin que si nous souhaitons développer des composants audio pour notre jeu via l'outil XACT). Il est aussi recommandé de télécharger les dernières versions du runtime de DirectX ;

  • Microsoft Visual C# 2005 Express Edition ;

  • Microsoft XNA Game Studio Express.


L'installation de chacun de ces logiciels devrait être três simple pour tout le monde, car comme tous les outils de Microsoft, l'assistant d'installation est intuitif. Cependant, nous vous recommandons fortement de réaliser ces installations dans l'ordre indiqué. En effet, XNA Game Studio Express vérifie les installations précédentes ainsi que ce qui est installé sur la machine.


Les namespaces et les classes


Nous avons dit plus haut que XNA propose deux composants essentiels, dont XNA Framework que nous avons présenté comme un ensemble de librairies de code géré et créé par Microsoft pour XNA. En fait cet ensemble de librairies n'est rien d'autre qu'un ensemble de classes encapsulées dans différents namespaces, chacun étant créé dans un but bien précis. Les namespaces sont les suivants :


  • Microsoft.Xna.Framework : c'est le names-pace standard de l'architecture XNA, dans lequel est implantée la classe Game, cour de tout le systême ;

  • Microsoft.Xna.Framework.Audio : Comme son nom l'indique, ce namespace fait référence à toutes les classes qui sont relatives à la manipulation de sons dans notre jeu,

  • Microsoft.Xna.Framework.Graphics : Inclut des classes pour le chargement d'images et leur visualisation à l'écran ;

  • Microsoft.Xna.Framework.Input : Classes relatives à l'entrée et sortie clavier, souris et autrès dispositifs de contrôle de la Xbox 360 ;

  • Microsoft.Xna.Framework.Storage : Classes permettant la lecture et l'écriture de fichiers ;

  • Microsoft.Xna.Frameworl.Math : Inclut un bon ensemble de classes pour faciliter la manipulation des vecteurs et matrices ;

  • Microsoft.Xna.Framework.Components : les composants du jeu sont un mécanisme que proportionne une manière modulaire pour ajouter facilement des fonctionnalités aux jeux, de manière à ce qu'ils puissent etre utilisés entre applications.


Si nous regardons d'un peu plus pres les tablespace, nous nous rendons compte qu'ils ont été nota­blement simplifiés par rapport a ceux disponibles pour coder DirectX. Regardons maintenant les 4 classes basiques de XNA : Game, GameComponent, GraphicsComponentet GameWindow.


La classe Game


Cette classe est sans doute parmi les plus importantes de toutes, étant celle que nous devons étendre pour créer notre propre jeu (si nous utilisons les assistants d'installation, Microsoft le fait pour nous). De cette classe, nous devons sortir 3 méthodes : Update, Draw et OnStarting, qui serviront comme suit :


  • Méthode Update : cette méthode se charge de toute la logique de l'application, du fait d'appuyer sur une touche du clavier aux différents périphériques de jeux, à passant par l'application d'algorithmes d'IA;

  • Méthode Draw : Elle est responsable de "peindre" à l'écran chaque photogramme de l'application ;

  • Méthode OnStarting : Cette méthode contient tout le code d'initialisation nécessaire à l'exécution du premier photogramme.


Ceux d'entre vous qui ont approché auparavant ce monde pourront voir que sur les méthodes précé­dentes est implémentée l'idée classique que derrière chaque jeu-boucle ou boucle de jeu se cache la structure classique visible sur la Figure 3.





Figure 3. Cycle de vie classique d'un jeu vidéo


La figure nous montre que tout jeu comporte une phase d'initialisation, puis de manipulation, gestion et calcul. Cette derniere est la phase oů se font toutes les choses importantes d'un jeu, comme le calcul des positions des objets, l'application d'algorithmes d'IA, etc., ce qui permet ensuite de redessiner ce qui va apparaitre après à l'écran. De plus, avec XNA, nous pouvons oublier tous les soucis de buffers de mémoire (la fameuse technique du double buffer) qu'il fallait utiliser auparavant pour éviter tous les soucis lors du passage d'un affichage a un autre.


De même que les méthodes précédentes, la classe Game dispose d'une autre méthode fondamentale : la méthode Run, qui lance l'exécution du jeu quand on l'invoque ? Lancer l'exécution du jeu signifie que les méthodes UpdateetDrawselanceront également pendant un certain moment, jusqu'a ce que le jeu s'achève, évenement qui se traduit par l'exécution de la méthode Exit de la classe.


La classe GameComponent


La classe GameComponent est la racine de tous les composants de XNA, de manière a ce qu'elle puisse être utilisée dans les différentes autrès applications. Ces composants contiennent une méthode Update et une autre méthode Draw pour implémenter des fonctionnalités supplémentaires. Il est important de comprendre que la classe Game se comporte comme un conteneur d'objets GameComponent, et comporte pour cela une variable membre du nombre GameComponents de la classe GameComponentCollection.


On peut forcer l'exécution de tous les méthodes Update et Draw compris dans la classe Game via les méthodes UpdateComponents et DrawComponents de cette classe.


La classe GraphicsComponent


De tous les GameComponents avec lesquels nous devons nous familiariser, le plus important est GraphicsComponent, qui est utilisé pour manipuler la configuration et administrer les dispositifs graphiques de la machine. Que nous utilisions les assistants de Microsoft ou que nous créions du début la structure classique d'un jeu, il sera quand même nécessaire de disposer d'un exemple et d'y jeter un śuil, même si cela consiste généralement à quelque chose comme ceci :


  • Instancions un objet de la classe Graphics

    ComponentgraphicsComponent = newGraph icsComponent( ) ;


  • Etablissons les propriétés de l'ob­jet qui nous intéressent

    graphicsComponent.BackBufferWidth = 0;

    graphicsComponent.BackBufferHeight = 0;

    graphicsComponent .....


  • Ajoutons un composant graphique à la série de composants de la classe

    GameGameComponents.Add(graphicsComponent);


  • Ajoutons enfin les gestionnaires d'évènements que nous pensons être utiles, soit ici un gestionnaire pour le reset

    graphicsComponent.DeviceReset += new EventHandler(graphicsComponent_DeviceReset) ;


La classe GameWindow


La classe Game dispose d'une autre variable qu'il faut connaitre, et qui est responsable de l'encap-sulation de l'information importante à propos de la fenêtre ou s'exécute notre jeu. La différence entre cette classe et la précédente est que s'exécute un GraphicsComponent sur GameWindow, alors que dans un jeu classique il serait plutôt normal de disposer de n objets GraphicsComponent. Nous aurons aussi seulement un seul objet GameWindow qui va référencer la fenêtre du jeu.Cette classe a des propriétés intéressantes, comme par exemple ClientHeight et ClientWidht qui donnent les tailles (hauteur et largeur) de la fenêtre ou encore Title pour changer le nombre de fenêtrès. Cette classe dispose de propriétés très intéressantes, comme ClientHeight ou Junto, ou encore des méthodes reliées au changement de fenêtre - par exemple OnActivated-, ou OnClientSizeChanged qui s'invoque quand on change la taille de la fenêtre de jeu, ou finalement OnPaint qui s'invoque quand on veut repeindre l'écran,…


Quelques exemples


Une fois qu'il est globalement clair ce qu'es XNA et XNA Game Studio Express, et que nous voyons comment ils fonctionnent, nous al­lons maintenant mettre en śuvre ces idées que nous venons de voir sur quelques exemples.



Création d'un jeu-boucle classique


Le code le plus simple nécessaire pour créer un jeuboucle classique est le suivant (disponible dans le projet ProyectoBucleDeJuego) :


  • Créons un nouveau projet en blanc depuis l'option File / New Project, et dans la liste des options disponibles, nous choisissons Empty Project ;

  • Créons une nouvelle classe descendant de Game;

  • Réécrivons les méthodes Draw et Update avec la logique et le code de visualisation propre a ton application, auquel cas le code le plus simple que nous pouvons introduire dans chacune de ces méthodes sera le suivant : protected override void Draw()


Dans les 2 méthodes, nous avons invoqué le constructeur de la classe père, pour s'assurer une initialisation correcte, et nous avons aussi invoqué les méthodes correspondantes DrawComponents et UpdateComponents. Dans le cas de la méthode Draw, nous nous en assurons via la méthode EnsureDevice que cet adaptateur fonctionne correctemment.


  • Ajouter un attribut de la classe Graphics-Component;

  • Créer les gestionnaires d'évenements ;

  • Créer le GraphicsComponent et ajouter le GameComponents (comme nous avons expliqué précédemment) ;

  • Créer une instance de notre classe ;

  • Appeler une méthode Run de l'instance de notre classe.









Listing 1. Le code de la création du jeu


{

if (!graphicsComponent.EnsureDevice()) return;

base.Draw() ;

DrawComponents();

}


protected override void Update() {

base.Update();

UpdateComponents() ;

}






Dans l'exemple ProyectoBucleDeJuego2, nous avons étendu la fonctionnalité de l'exemple antérieur, pour permettre le redimensionnent de la fenêtre ou sa visualisation à l'écran et ajouter quelques évenements supplémentaires permettant de contrôler la boucle du jeu, ce qui permet de mettre en pause et d'en sortir. Pour permettre a l'utilisateur de redimensionner la fenêtre de jeu, il faut mettre a true la propriété AllowUserResizing de la classe Game. Si nous souhaitons au contraire que l'utilisateur puisse maximiser la fenêtre , nous utiliserons alors la méthode ToggleFullScreen de l'objet GraphicsComponent que nous avons défini. Si nous souhaitons en plus ajouter un gestionnaire d'évenements sur le changement de la taille de la fenêtre, nous pouvons le faire en rajoutant la ligne suivante de code :

Window.ClientSizeChanged += new EventHandler(Window_ClientSizeChanged);


Ou Window_ ClientSizeChanged sera la méthode a invoquer suite à l'occurrence de l'évenement ClientSizeChanged.


Création d'une fenêtre classique de jeux


L'application suivante que nous allons créer consistera à utiliser l'assistant de Microsoft, créer une fenêtre classique de jeu ou nous placerons un objet que nous animerons d'une façon quelconque.


Le processus à suivre est très simple, et consiste en les étapes suivantes (nous commenterons les aspects les plus importants en chaque point concret) :


  • Créons un nouveau projet, et indiquons dans la fenêtre de dialogue le type d'application que nous souhaitons créer, puis sélectionnons l'icône Windows Game (XNA) et nous y assignons un chiffre à la solution que nous souhaitons créer. Par exemple, TestJuegoXNA qui ne présente aucune difficulté, une fois rentrée l'information précédente, l'environnement nous montrera une vue du dessinateur pour notre jeu. Sauvegardons ensuite notre projet en indiquant le chemin vers le répertoire oů nous voulons effectuer la sauvegarde ;
  • Si vous modifiez l'environnement de développement, nous aurons plusieurs fichiers créés : les classes Game.cs et Program.cs. Le premier est celui ou nous allons introduire le code de notre jeu, le second est la classe principale de notre application ou va se faire l'instanciation de la classe Game et l'invocation de la méthode run() de la même classe qui va permettre le lancement de notre jeu.


Remarque


Avec .NET 2.0, il y a un nouveau concept appelé classes partielles, qui consiste en la possibilité de diviser une même classe en plusieurs archives, ce qui facilite le travail collaboratif sur différentes parties de la même classe, tout en ra­joutant la passibilité que le code créé automatiquement se retrouve dans un autre fichier que celui sur lequel nous travaillons, ce qui facilite sa manipulation. Pour indiquer qu'une classe est partielle, nous utilisons le mot réservé partial - regardez le code visible sur la Figure 4.





Figure 4. Un décor en mouvement


Le graphisme que nous allons animer se trou­ve dans le fichier mercenary.png. Pour faire en sorte que ce décor soit animé dans la fenêtre , nous allons avoir besoin de la classe SpriteBatch qui va permettre de dessiner à l'écran, via la mé­thode Draw de la classe. Si nous regardons le code, nous verrons la ligne suivante a l'intérieur de la méthode Draw de la classe Game :


spriteBatch.Draw(myTexture, new Rectangle(spriteX, spriteY, myTexture.Width,myTexture.Height), Color.White);





Figure 5. Exemple de scroll latéral





Figure 6. Fenêtre principale de jeu MySpacewar





Figure 7. La version Retro en pleine action


Oů nous voyons que nous demandons le des­sin de la texture associée à notre graphique, aux coordonnées X et Y qui sont indiquées et qui se recalculent a l'intérieur de la méthode UpdateSprite invoquée a son tour par la méthode Update de la classe Game..


Création d'un scroll latéral


Grâce au XNA Framework, il est très simple de créer un scroll latéral du même genre qu'on trouve dans la plupart des jeux. Ici, nous allons utiliser les mêmes qu'on trouve dans les graphismes du jeu vidéo Dick Tracy, classique apparu il y a quelques années pour la console Megadrive de Sega (nous avons repris l'entièreté du premier niveau de ce jeu ici).


Dans cet exemple, nous allons diviser chacune des parties de ce scénario en différents fichiers graphiques nommés FondXX, chacun se chargeant dans une liste d'objets de la classe Texture2D, et ce chargement s'effectuant via la méthode FromFile de cette classe comme nous avons fait dans l'exemple précédent.


L'application MYSPACEWAR


Les exemples précédents ne sont qu'un maigre aperçu de ce que XNA peut offrir. MySpaceWar est un jeu de vaisseaux spacials dont le but est d'éliminer le vaisseau adverse avant qu'il ne fasse la même chose avec nous, qui a été développé par Stephen Russell, Peter Samson et Dan Edwards en 1962 sur un DEC PDP-1. Si nous souhaitons tester cet exemple, nous allons devoir créer un nouveau projet, et indiquer MySpaceWar dans la fenêtre de dialogue de choix de type de projet. Une fois le projet créé, nous pouvons l'exécuter directement, dans la fenêtre de présentation. H y a deux options de jeu possibles : l'option Retro qui correspond à la version originale du jeu en 2D, et la version Evolved qui est élaborée avec des graphiques en 3D.


De plus, si nous jetons un coup d'oil aux exécutables, nous voyons que le projet sera divisé en différentes sections, ou les plus intéressantes sont : Content (qui contient les différents graphiques, textures et sons du jeu), Evolved et Retro qui sont respectivement rattachés aux classes de la version Evolved et Retro, Common qui est rattaché aux classes d'usage classique,…


Nous avons en plus un fichier de configura­tion appelé settings.xml, oů nous pouvons paramétrer quelques détails du programme, comme par exemple le nom de la fenêtre de jeu, les po­sitions initiales des joueurs, et quelques autrès caractéristiques supplémentaires.


En conclusion


Àprès avoir vu tout ce qui précede, nous allons terminer maintenant. Pour des motifs d'espace, comme très souvent, nous n'avons pas eu l'occasion de voir en détail beaucoup d'aspects très intéressants. Mais j'espère qu'apres avoir lu cet article, plus personne n'aura d'excuse pour ne pas s'initier au monde passionnant de la programmation de jeux vidéos ; et qu'un important pas vers la démocratiser de la création de jeux vidéos ait été fait avec XNA Game Studio Express. Maintenant, il ne vous reste plus qu'a faire preuve d'imagination et d'entrainement, et qui sait, peutetre un jour certains d'entre vous se retrouveront avec les grandes majors du secteur.




SANTIAGO MÁRQUEZ

Santiago Marquez est ingénieur en informatique a l'Université Oberta de Cataluna et a participé a divers projets, tant nationaux qu'internationaux. Il travaille actuellement comme chef de projet au sein d'une importante multinationale européenne ou il gere la mise en place de processus ITIL. Contact: smarquezsolis@gmail.com




Sur Internet



Cet article est aussi disponible dans la version pdf a télécharger :
http://mscoder.org/fr/mscoder/download.html


Contactez-nous
Avez-vous des questions à nous poser ?
Souhaitez-vous acheter
un magazine ?
Contactez-moi !



Chercher