Créer un projet MonoGame pour Windows 8 ModernUI

Le prochain système d’exploitation de Microsoft, Windows 8, apporte une nouvelle approche d’utilisation proche des appareils mobiles, la fameuse interface Metro. Toutes les applications Metro (les Metro Style Apps) sont des applications autonomes qui ont leurs propre espace de stockage comme c’est le cas déjà le cas pour les applications mobiles sur Windows Phone 7 et sur Xbox 360 mais aussi sur AIR par exemple. La nouvelle API WinRT apporte des changements important sur la conception des applications au sein de Metro. Comme XNA n’a pas été mis à jour pour Windows 8 et Windows Phone 8, l’équipe du Framework MonoGame a commencé un portage qui commence d’arriver à maturation. Les changements au niveau de MonoGame sont nombreux, on notera par exemple la suppression de la dépendance à OpenTK qui permettait de gérer l’affichage via OpenGL et le son via OpenAL pour une utilisation de SharpDX (la meilleur bibliothèque DirectX managée actuelle). Nous partons donc avec un rendu via Direct3D 11 ! Il y a aussi des changements important au niveau du gestionnaire de contenu, mais nous y reviendrons. Actuellement le support de Windows 8 n’est pas « officiel » et il faudra compiler la branche de développement « develop3d » et mettre en place un projet Metro manuellement. Nous allons voir comment mettre en place tout ça, voilà ce qui vous attend :

  1. Téléchargement des sources de la branche « develop3d »
  2. Compilation des sources en mode « Release »
  3. Création du projet Metro
  4. Code de test

Courage ! il faut souffrir pour être beau non ? Et bien pour faire des jeux cools sous Windows 8 RC avant tout le monde c’est pareil 😉

Télécharger les sources

On va commencer par mettre en place les outils dont nous aurons besoin, dans un premier temps installez Visual Studio 2012 (j’utilise la version Pro) et Git pour Windows. Nous allons récupérer les sources, ouvrez git bash et placez vous dans le dossier où vous voulez télécharger les sources (je me place pour ma part dans c:\User\Yann\Sources). Ensuite on récupère les sources

git clone https://github.com/mono/MonoGame.git

Une fois que le téléchargement est terminé on passe sur la branche « develop3d »

git checkout develop3d --force

J’ai ajouté l’option –force car les fichiers du dépôt ne seront peut être pas encodés avec le même saut de ligne que vous et git vous aurait demandé de commiter les changements avant de faire un changement de branche, donc là on dit à git « fou moi la paix et passe sur develop3d ». Il faut maintenant ajouter les dépendances externes comme suis :

git submodule init

pour finir on les télécharges

git submodule update .\ThridParty

Si vous voulez récupérer les exemples et les starter kits vous pouvez aussi faire un update tout court mais attention ça sera beaucoup plus long car il y a beaucoup d’exemples 😉 (J’attire votre attention sur le fait qu’un ne possède de projet Windows 8 donc ça ne sert pas à grand chose).

Voilà nous sommes prêt à compiler les sources, rendez vous dans le dossier de MonoGame (dans l’explorateur cette fois ci, la console c’est fini) et ouvrez la solution Windows 8 : MonoGame.Framework.Windows8

Compilation des sources

Les dépendances sont manquantes

La première étape consiste à vérifier si les références sont bien là, si les références sont manquantes il faudra les ajouter, pour ça pas de panique on sen rend sur le site de SharpDX pour télécharger les binaires et on ajoutes les fichiers dll de l’archive précédemment téléchargé en référence au projet. Je ne pense pas que vous soyez intéressé pour debuger le Framwork MonoGame ? Donc dans ce cas on sélectionne le mode de compilation « Release » qui nous fournira une série de fichiers dll optimisés pour la production.

On compile la solution entière, clic droit/Compiler la solution. Une fois la compilation terminée allez dans le dossier MonoGame\MonoGame.Framework\bin\Release et récupérez y son contenu, nous l’utiliserons prochainement dans notre projet MonoGame Metro.

 Création du projet Metro

Si vous avez déjà essayé de faire des applications Metro vous avez remarqué que le fonctionnement est similaire à celui de Windows Phone, à savoir un fichier d’interface XAML et du code behind en C#. Pour créer un jeu avec MonoGame nous n’avons pas besoin de tout ça alors l’équipe à créé une série de Templates pour Visual Studio afin de démarrer un projet rapidement et sans trop de prise de tête.

Les templates pour Visual Studio 2012

Dans un premier temps allez dans Mes documents puis dans le dossier Visual Studio 2012, allez ensuite dans Templates, ProjectTemplates\Visual C# et créez un dossier MonoGame.

Il faut maintenant y copier les 3 dossiers présents dans le dossier ProjectTemplates\VisualStudio11.MonoGame.2.5.

Maintenant quand vous démarrerez Visual Studio et que vous créerez un nouveau projet C# vous aurez une nouvelle possibilité : MonoGame ! Les amis, nous attaquons la partie la pénible de cet article, il va falloir éditer le fichier de projet pour pouvoir utiliser le gestionnaire de contenu.

Comme je l’ai dit au début de cet article, l’API WinRT introduit un tas de changements  comme par exemple le stockage mais surtout la programmation asynchrone (une nouveauté de .Net 4.5). On ne peut donc pas charger des ressources qui pourraient bloquer le programme trop longtemps (voir les spécifications des applications Metro). J’attire aussi votre attention sur le fait que pour le moment vous ne pouvez charger que du contenu compilé en .xnb, donc pas de format non compressé comme une image JPG ou PNG, mais nous y reviendrons en fin d’article (j’ai un super outils à vous présenter).

Dans un premier temps on créé un nouveau projet de jeu MonoGame pour Metro et on ajoute les références qui vont bien, prenez donc les fichiers dll que nous avons compilé tout à l’heure et ajoutez les en tant que référence au projet, à partir de là vous pouvez compiler et lancer le projet, vous aurez le droit à un petit Splash Screen puis à un écran bleu (normal on fait un clear de l’écran avec Color.AliceBlue et rien d’autre :P). Le projet contient un dossier Assets où sont stockés les différentes images pour les icones et le Splash Screen, créez maintenant un dossier Content où on pourra mettre toutes nos assets de jeu (au format XNB je vous le rappel), pendant que vous y êtes créez aussi un dossier MonoGame.

Maintenant fermez Visual Studio 2012 et rendez vous dans le dossier « projet » de votre projet (typiquement dans Mes Documents/Visual Studio 2012/Projects/Votre Projet/Votre Projet puis éditez le fichier du projet avec un éditeur de texte comme Notepad++ par exemple.

 

Vous avez devant vous un fichier XML qui décrit le fonctionnement de votre projet, on y retrouve les références, les dossiers du projet, etc…

Vous allez remplacer la troisième ligne

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />

Par celle-ci

<Import Project="MonoGame\MonoGame.ContentPipeline.targets" />

Enfin ajoutez ceci avant la fermeture de la première balise <PropertyGroup>

<MonoGamePlatform>Windows8</MonoGamePlatform>

Ensuite vers la ligne 118 cherchez la propriété <ItemGroup> vous y trouverez des balises <Content>, il faut maintenant ajouter la ligne suivante qui va dire à Visual Studio qu’il faut copier le dossier Content dans l’espace de stockage de l’application

<Content Include="Content\**\*.*">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>

Si vous n’êtes pas sur de votre coup ne vous en faites pas j’ai laissé le projet fonctionnel en fin d’article, alors vous pourrez vérifier ce que vous avez fait.

Il nous reste encore une chose à faire (oui je sais ça commence à être long mais c’est promis après ça c’est fini) et c’est là une des chose les plus importantes à faire ! Vous allez copier le contenu du dossier MonoGame\MonoGame.ContentPipeline (des sources de MonoGame) vers le dossier MonoGame de votre projet, si vous regardez plus haut on fait référence à ce dossier et son contenu dans le fichier XML du projet en ligne 3. A partir de maintenant vous pouvez ouvrir votre projet avec Visual Studio et commencer à programmer votre jeu ! Oui on a fini, c’est vrai  je vous assure 🙂

Le projet fonctionnel sur l’émulateur Windows 8

Une dernière chose avant de vous laisser partir, comme nous l’avons vue pour le moment on ne peut utiliser que des fichiers xnb alors comment faire pour ne pas devoir installer XNA Game Studio et créer un projet afin de compiler ses fichiers en xnb ? La réponse est simple il existe un petit programme « XNA 4 Content Compiler » qui permet de compiler des images, musiques, fonts en fichier xnb ! La solution vraiment pratique pour éviter une installation de Visual Studio 2010 Express.

Une autre alternative existe et est tout aussi efficace, XNB Builder vous permettra de construire des fichiers XNB à partir de tous les formats connus par XNA. Je vous recommande vivement cet outils qui est plus complet que le précédent.

Conclusion

Vous pouvez télécharger le projet sur le dépôt github dédié à ce blog. Bon et bien nous avons finalement réussi à mettre en place un projet fonctionnel pour Windows 8 Metro. Sachez que grâce à l’utilisation de SharpDX, les jeux que vous créerez seront compatible avec le tout nouveau Windows Store et vous pourrez ainsi en faire profiter tout les utilisateurs. Pour plus d’information n’hésitez pas à suivre le compte twitter de MonoGame et consulter le forum sur le codeplex.

SpaceShip porté sur Windows 8 Metro
SpaceShip porté sur Windows 8 Metro

Edit : Je viens de réaliser un port très rapide du jeu de shoot spatial du TP XNA que je vous propose sur ce blog. Vous pouvez le télécharger sur Github à cette adresse.