Dans cet article, nous verrons comment créer un projet de jeu vidéo avec XNA Game Studio Express, et nous verrons dans le détail ce qu’il contient.
Introduction
Nous allons donc créer notre premier projet XNA. Ici, nous n’allons pas entrer dans les détails de chaque méthodes mais uniquement expliquer leur fonctionnement.
Le but de cet article est simplement de vous expliquer l’architecture d’un projet XNA pour enfin, dans les prochains articles, vous aider à créer un jeu vidéo du début à la fin. Je vous donnerai le nom du jeu que nous ferons dans le prochain article :). Si vous avez des suggestions, des idées, n’hésitez pas à poster des commentaires.
Prérequis
Au préalable, vous devez avoir installé Visual Studio C# Express ainsi que son SP1, puis le module XNA Game Studio Express. Si ce n’est pas fait, consultez l’article précédent.
Création du projet XNA
Commencez par ouvrir XNA Game Studio Express, faites File > New > Project…

Voici la liste des types de projets que vous pouvez créer pour la plateforme XNA :
- Windows Game : Projet de jeu pour plateforme Windows
- Windows Game Library : Projet de bibliothèque de classes pour un projet Windows Game
- Xbox 360 Game : Projet de jeu pour plateforme Xbox 360
- Xbox 360 Game Library : Projet de bibliothèque de classes pour un projet Xbox 360
Nous allons créer notre premier jeu pour la plateforme Windows donc choisissez un projet de type Windows Game.

Je vous conseille de placer votre solution à la racine de votre système car les noms de dossiers à rallonge et avec des espaces peuvent poser des problèmes lors de la compilation et lors de l’exécution de votre programme.
Architecture du projet
Lorsque vous avez fini de créer votre projet Windows Game, vous obtenez la solution suivante :

Vous remarquerez que l’architecture est presque identique à une application console C#. Une des différences se situe au niveau des références. En effet ici viennent s’ajouter deux nouvelles références Microsoft.Xna.Framework et Microsoft.Xna.Framework.Game. L’espace de nom Microsoft.Xna.Framework contient toutes les classes permettant d’accéder à des ressources de la machine telles que le son, le graphisme (2D, 3D), les entrées (Clavier, souris, manette) ainsi que le stockage de fichiers.
Ensuite, le point d’entrée du programme est toujours le void Main situé dans la classe Program (Fichier Program.cs). Le jeu se lance en utilisant la méthode .Run() de l’instance de la classe Game1 (Fichier Game1.cs) qui hérite de la classe Microsoft.Xna.Framework.Game. Cette instance représente donc note jeu.
La classe Game
La classe Game qui hérite de la classe Microsoft.Xna.Framework.Game est composée d’un constructeur public et de cinq méthodes protected.
Le constructeur
GraphicsDeviceManager graphics; ContentManager content; public Game1() { graphics = new GraphicsDeviceManager(this); content = new ContentManager(Services); }
La classe GraphicsDeviceManager est la couche logicielle qui fait la liaison entre votre code et la carte graphique. Cette couche est la pièce maïtresse de la plateforme XNA, en effet elle permet de faire abstraction de la marque ainsi que du modèle du processeur graphique (GPU : Graphic Processor Unit) pour écrire notre jeu. Si nous n’avions pas cette couche, il nous faudrait écrire notre code pour chaque modèle de GPU.
La classe ContentManager permet le chargement et la gestion du Content Graphic (Les éléments graphique) et du Content Pipeline. Le Content Pipeline, permet de faire la liaison avec les objects graphiques issus d’autres programmes (tels que MS Paint, Adobe Photoshop, 3D SMax…), et de les transformer dans un format binaire (XNB) utilisable pour notre application.
Ensuite le constructeur permet d’initialiser ces deux variables (graphics et content) dont nous nous servirons pour créer notre jeu.
La méthode Initialize()
protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); }
La méthode Initialize() est une méthode override c’est à dire qu’elle est déjà définie dans la classe héritée (Microsoft.Xna.Framework.Game). Elle nous permet de faire toute l’initialisation de nos objets, de toute la partie non-graphique. L’appel de cette méthode n’est effectué qu’une seule fois, juste après le chargement de notre GraphiqueDeviceManager.
La méthode LoadGraphicsContent()
protected override void LoadGraphicsContent(bool loadAllContent) { if (loadAllContent) { TODO: Load any ResourceManagementMode.Automatic content } // TODO: Load any ResourceManagementMode.Manual content }
Dans la méhode LoadGraphicsContent(), nous allons effectuer tous les chargements des objets graphiques. Elle est appelé juste après le chargement de notre objet ContentManager.
La méthode UnloadGraphicsContent()
protected override void UnloadGraphicsContent(bool unloadAllContent) { if (unloadAllContent) { // TODO: Unload any ResourceManagementMode.Automatic content content.Unload(); } // TODO: Unload any ResourceManagementMode.Manual content }
Dans la méthode UnloadGraphicsContent(), nous allons effectuer toutes les destructions des objets graphiques. Elle est appelée juste avant la destruction de notre objet ContentManager.
La méthode Update()
protected override void Update(GameTime gameTime) { // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit();
// TODO: Add your update logic here base.Update(gameTime); }
Dans la méhode Update(), nous allons gérer l’intelligence artificielle, les entrées utilisateur (Clavier, Souris, Manette…), les musiques, les colisions… C’est donc à partir de cette méthode que nous allons gérer les déplacements des joueurs.
Le GameTime est l’objet qui permet de savoir par exemple le temps écoulé depuis la dernière frame, depuis le dernier appel de la méthode Update() mais également le temps d’exécution de l’application, le tout avec une précision à la milliseconde. MSDN.
La méthode Draw()
protected override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime);}
La méthode Draw() permet d’afficher tous nos objets graphique à l’écran, elle est déclenchée à chaque fois qu’une frame (image à l’écran) doit être affichée (Par exemple : pour un jeu qui tourne à 24 frames par seconde (fps) la méthode Draw() sera déclenchée 24 fois par seconde).
Mots clés Technorati :
C#,
Game Studio 2.0,
XNA