XNA
Présentation de XNA
Introduction à XNA
XNA est un ensemble d'outils permettant de faciliter le développement de jeux vidéo pour :
- La XBOX 360
- Windows Phone
- Zune
- PC
XNA est un outil contenant :
- Un framework .net permettant la création d'un jeu vidéo
- Des outils d'intégration de contenus, qui permettent d'intégrer des médias (son, image, musique etc.) à votre jeu
- Une documentation détaillée
Pour pouvoir créer un jeu vidéo avec XNA, il est nécessaire de connaitre les bases du langage C#, car le framework n'est disponible que pour ce langage. En outre, il est aussi nécessaire d'utiliser l'IDE Visual C# ou Visual Studio. Voici les différents liens permettant de les télécharger :
- Visual C# : Cliquez ici
- XNA : Cliquez ici
XNA comporte plusieurs avantages :
- Il est gratuit.
- Il est multi-plateforme : Vous écrivez votre jeu une seule fois, mais il sera fonctionnel pour les quatre plateformes citées précédemment, moyennant quelques petites réadaptations comme les contrôles ou les médias.
- Il facilite grandement le développement de jeux-vidéo : Le framework fournit par XNA est un framework de haut niveau. Les tâches de bas niveau, comme la gestion de la mémoire et des threads, est directement géré par le framework. Ceci permet de faciliter le développement et de gagner du temps. Le développeur peut ainsi se focaliser sur les spécificités de son jeu.
- Il permet aux " petits développeurs " d'avoir une meilleure visibilité : La Xbox 360 possède un magasin de jeux vidéo en ligne. Les développeurs peuvent ainsi mettre en ligne leur jeu, dans un magasin ayant une grande renommée.
Malheureusement, XNA n'est pas exempt de défaut :
- Microsoft ne met pas assez en avant les jeux vidéo amateur. Par conséquent, il est difficile pour les petits studio de rentabiliser leurs jeux.
- Le développeur est contraint au niveau des outils qu'il doit utiliser pour développer son jeu. Il lui est nécessaire d'être sous Windows, puisqu'il ne peut utiliser que l'IDE Visual Studio. Il doit d'ailleurs apprendre le langage C# puisqu'XNA n'existe que pour ce langage. Et enfin, les jeux conçus ne fonctionnent que sur des plateformes Microsoft.
Architecture
Le schéma ci-dessous montre l'architecture du framework de XNA.
Nous avons ici une architecture sous forme de "couches".
La couche " Plateforme " est la couche de bas niveau de XNA. Elle constitue l'un des points forts de XNA, puisque le développeur n'a pas besoin d'écrire du code " bas niveau ".
Cette couche permet d'accéder aux ressources de la machine notamment :
- La carte vidéo via le composant Direct 3D
- La carte son via le composant XACT
- Les contrôles(clavier, manettes) via le composant XInput
- La gestion des ressources via le composant Xcontent
La couche " Coeur du framework " représente, comme son nom l'indique, le noyau central de XNA. Elle contient l'ensemble des classes qui seront utilisées par le développeur. Ces classes constituent donc un intermédiaire entre le développeur et la couche " bas niveau " :
- Microsoft.Xna.Framework.Graphics permet l'accès aux graphismes 2D ou 3D
- Microsoft.Xna.Framework.Audio permet la manipulation des sons
- Microsoft.Xna.Framework.Input permet la gestion des divers contrôles du jeu (manette, clavier etc.)
- Microsoft.Xna.Framework.Designer contient des classes " mathématiques " qui seront surtout utiles pour la 3D.
- Microsoft.Xna.Framework.Storage permet l'accès aux périphériques de stockage (disque dur d'un PC ou d'une Xbox 360 ou une carte mémoire)
La couche framework étendu est constitué de deux composants importants :
- Le modèle d'application permet de gérer l'architecture globale du jeu. Elle permet d'automatiser un certains nombre d'opérations comme la gestion des boucles du jeu et les évènements bas niveau.
- Le content pipeline permet d'importer facilement les contenus multimédia au sein du jeu. Il se charge notamment de reconvertir ces média pour les rendre utilisables par les plateformes visées.
La couche de plus haut niveau, "Jeux", contient votre code et vos ressources multimédia (contenu). Elle contient aussi les différentes librairies fournies par la communauté et des starters kits. Les starter kits sont des mini-jeux que les débutants peuvent manipuler afin de comprendre le fonctionnement de XNA.
Les différentes phases d'un jeu
Le schéma ci-dessous explique les différentes étapes lors de l'exécution d'un jeu XNA. Il faut noter que les éléments de votre jeu possèdent elles aussi ces différentes phases.
La phase Initialize permet d'initialiser les paramètres du jeu, de créer les composants du jeu et de récupérer des informations sur la plateforme d'exécution.
La phase LoadContent permet de charger les différentes ressources de votre jeu (textures, fichiers son etc.).
La phase Update permet de mettre à jour le modèle. Cela signifie que c'est ici que nous effectuerons les opérations logique du jeu. Cette phase permet par exemple de :
- Prendre en compte les différentes actions du joueur.
- Vérifier les collisions
- Recalculer les positions des éléments du jeu.
La phase Draw permet d'afficher les éléments graphiques à l'écran.
La phase UnloadContent permet de décharger les ressources qui ont été préalablement chargé par LoadContent.
Les différents types de composants
Un jeu XNA manipule trois types de composants :
- Les DrawableGameComponents
- Les GameComponents
- Les Services
Pour chaque type de composants, nous avons un container. Si un composant est ajouté à un des containers, alors les différents traitements que nous avons vu précédemment seront automatisés. Pour utiliser des composants dans votre jeu, il n'est pas nécessaire de les ajouter à ces containers ; vous pouvez donc décider de les gérer manuellement.
Les DrawableGameComponents permettent d'afficher à l'écran les différents éléments graphiques (2D et 3D) de votre jeu.
Les GameComponents permettent la gestion des éléments non graphiques de votre jeu comme les musiques et les bruitages.
Les Services permettent de décrire et de fournir au jeu les éléments nécessaires à son fonctionnement. Ils servent notamment à gérer les données. Les Services peut ainsi fournir plusieurs types d'informations :
- Le chemin des différentes ressources du jeu.
- Les informations fournis par les différents contrôles du jeu (clavier, manette, souris etc.)
- Les informations relatives à un personnage de votre jeu
L'utilisation des Services n'est nullement obligatoire mais permet d'avoir un code plus modulaire et plus propre. Leur fonctionnement sera détaillé par la suite.