Dans cet article précédent, je vous ai présent�� sous forme d’un petit tutorial comment migrer le code du jeu de plateforme à la Indiana Jones de XNA 3.1 vers XNA 4.0 pour Windows Phone 7.

Entre temps, le SDK a été mis à jour vers une version nommée “April Refresh”. Vous trouverez à la fin de ce billet, la solution Visual Studio mise à jour pour cette nouvelle version intermédiaire.

Par contre, pas de chance, nous avons temporairement perdu l’accès au clavier de la machine hôte lorsque l’on est dans l’émulateur Windows Phone avec une application XNA (il fonctionne par contre avec une application Silverlight). Du coup, mon jeu devient… totalement inutile. ;-)

Mais entre 2 rendez-vous client, je me suis dit que c’était une bonne occasion de tester une des solutions permettant de simuler un accéléromètre. Je suis donc parti sur la solution présentée ici : http://www.robmiles.com/windowsphonefaq/2010/4/1/how-do-i-use-the-accelerometer-in-the-windows-phone-emulator.html suggérée par notre ami Pierre Cauchois dans un de ces articles.

Le but du jeu : construire un mini-serveur HTTP renvoyant l’état d’une manette Xbox 360 qui sera consommé par l’application Windows Phone à travers l’objet WebClient de Silverlight. Nous serons donc plus à l’état d’expérimentation en attendant d’avoir mieux. Mais c’est déjà pratique pour débugger un peu. On voit ici par contre un sujet important : on peut faire des appels HTTP depuis une application XNA grâce à la librairie System.Net de Silverlight. C’est donc un bon exemple de cohabitation des 2 frameworks comme je vous l’avais indiqué lors de ma première présentation en retour du MIX.

Vous trouverez le code du mini-serveur HTTP dans le ZIP en fin d’article. Je l’ai simplement porté vers Visual Studio 2010 Express/XNA 4.0. Compilez le projet “GamePadHostServer” et lancez l’ensemble en mode “Administrateur”. Branchez aussi une manette Xbox 360 sur le PC hébergeant l’ensemble et vous obtiendrez un résultat similaire à cela :

GamePadHostServer

Vous pourrez déjà donc vérifier que la manette est bien reconnue et que les valeurs qui seront envoyées en HTTP à l’émulateur sont cohérentes.

Ensuite, ouvrez le projet “WindowsPhonePlatformer” et dans le fichier “PlatformerGame.cs”, changez la ligne de code suivante :

static string url = "http://davrous8go:8080";

Avec le nom Netbios de votre machine. Lancez l’ensemble et vous devriez alors pouvoir jouer au jeu avec la manette Xbox 360. Par contre, autant le jeu devient un peu moins inutile… autant il devient carrément injouable avec le micro-délai qu’il y a entre le moment où l’application XNA demande l’état de l’accéléromètre côté manette/serveur HTTP et le moment où elle le reçoit ! Mais bon, c’est déjà amusant. :-)

En résumé, nous avons donc le schéma suivant d’architecture :

ArchiXNAGPAcceleroWP7

Voici le projet complet faisant appel à tout cela :

Have fun with XNA !

David