SL4 XNA Platformer Level Editor pour WP7 : le jeu XNA (4/4)
Voici le dernier billet de cette série de 4 articles. Dans l’article précédent, nous avons vu comment gérer le stockage Azure depuis l’application Silverlight 4. Nous allons voir ici les modifications apportées au jeu XNA Platformer pour Windows Phone 7 que je vous avais fourni dans ce précédent billet (et rafraichit en April CTP ici). Vous trouverez le code à télécharger à la fin de ce billet.
Ajout de menus
La première étape fut d’ajouter des menus pour pouvoir laisser l’utilisateur charger les niveau depuis le cloud et lancer le jeu :
J’ai également ajouté un menu pendant le jeu lorsque l’on clique sur le bouton de retour :
Pour gérer cette notion de menus, j’ai simplement ajouté au projet Platformer partagé avec vous dans les articles précédents la logique proposée dans l’exemple nommé GameStateManagement : https://creators.xna.com/en-us/samples/gamestatemanagement . J’ai alors légèrement adapté cet exemple pour Windows Phone 7 et ajouté une petite animation sur l’élément actuellement sélectionné dans le menu. Pour cela, j’ai changé le calcul du scale par défaut dans MenuEntry.cs :
float scale = 2.0f;
Avec ce calcul là :
// Pulsate the size of the selected menu entry.
double time = gameTime.TotalGameTime.TotalSeconds;
float pulsate = (float)Math.Sin(time * 6) + 1;
float scale = 2 + pulsate * 0.05f * selectionFade;
Vous pouvez voir le résultat dans la vidéo d’introduction visible dans le 1er article.
Communication avec le stockage Azure
Rien de plus simple ! Il suffit d’utiliser le framework Silverlight au sein d’une application XNA pour avoir accès aux objets classiques comme le WebClient, LINQ, etc. J’ai donc tout simplement copié/collé le code présenté dans l’article précédent pour lister l’ensemble des niveaux via une requête HTTP REST, faire le mapping LINQ to XML et charger les niveaux. La seule différence par rapport à l’application Silverlight 4, c’est que je stocke les niveaux chargés dans l’Isolated Storage de mon jeu Platformer :
private void SaveThisLevelToDisk(Stream stream, string fileName)
{
IsolatedStorageFile isof = IsolatedStorageFile.GetUserStoreForApplication();
IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(fileName, FileMode.Create, isof);
Int64 imgLen = (Int64)stream.Length;
byte[] b = new byte[imgLen];
stream.Read(b, 0, b.Length);
isfs.Write(b, 0, b.Length);
isfs.Flush();
isfs.Close();
isof.Dispose();
}
Ensuite j’ai très légèrement modifié les méthodes LoadNextLevel() et LoadTiles() pour qu’elles pointent vers l’Isolated Storage où se trouvent les fichiers téléchargés depuis Windows Azure. Le reste de la logique fonctionnant alors telle quelle.
Bref, vous l’aurez compris, la partie XNA fut clairement la plus simple à gérer de l’ensemble. On pourrait imaginer aller un peu plus loin en ajoutant une notification pour l’apparition de nouveaux niveaux dans le cloud. A vous maintenant de vous approprier le code ! :-)
Code à télécharger
Voici la solution Visual Studio 2010 compatible avec la version Beta des outils pour Windows Phone 7 :
Note : pour jouer au clavier dans l’émulateur, il faut d’abord cliquer dans l’écran et appuyer sur la touche “Pause”. Ensuite, vous pourrez faire bouger le joueur avec les flèches de gauche/droite et la barre d’espace.
Voilà, j’ai fini l’objectif que je m’étais fixé avant de partir me reposer en vacances. Bonnes vacances à tous et profitez-en pour réaliser de superbes applications pour Windows Phone 7 !
David
Comments
- Anonymous
October 06, 2011
Bravo pour vos explications claires et un Tuto sympa! Par contre j'ai un problème quand je lance votre programme avec l'émulateur windows phone 7. Voici mon message d'erreur: "Exception was unhandled" qui apparaît dans le fichier GameplayScreen.cs dans le private void loadNextLevel(). Pouvez vous m'aidez à trouver une solution pour remédier à ce problème?