Deployer et lancer un jeu XNA 4.0 sur émulateur WP7 sans visual studio.

8. June 2010 by Thomas.Trentin

 

Deployer et lancer un jeu XNA 4.0 sur émulateur WP7 sans visual studio.

1 . Pré-requis:

 

XNA Game Studio 4.0.

CTP April Refresh (Visual Studio 2010 Express For Windows Phone) .

 

Ce tutorial a pour but de vous montrer comment déployer un programme XNA 4.0 sur l'émulateur Windows Phone 7 de microsoft (fournit avec la April Refresh), sans avoir nécessairement le code sous la main.

Ceci peut ête très pratique notament afin de faire tester votre application à une personne tierce sans lui livrer votre code.

 

2 . Deploiement :

 

Créez votre projet XNA 4.0 et compilez le.

Pour une question de simplicité, les fichiers récupérés seront tous mis dans un dossier commun.

Allez dans le dossier de sortie de compilation (dans mon cas bin\Windows Phone\Debug) et récupérez le « .xap » généré, qui est l’archive contenant votre jeu.

Dans mon cas, il s’agit de « XnaGraphicsDemo.xap ».

 

Récupérez aussi le GameThumbNail.PNG.

Allez ensuite dans le dossier : \obj\Windows Phone\Debug et récupérez le fichier « XapCacheFile.xml ».

Il contient les informations sur les ressources et les fichiers de votre application, contenus dans le xap.

 

Enfin, allez dans le dossier properties et ouvrez le fichier AssemblyInfo.cs :

Il faut récupérer la valeur notée sur cette ligne :

Dans notre cas, la valeur à noter est donc : "ba971892-de57-4fa4-b7e6-65d9d6da5af7".

Cela correspond à l’ID de l’application, et est indispensable afin de l’utiliser sur Windows Phone (aussi bien pour le déploiement que pour l’installation).

Vous devez maintenant avoir un dossier contenant tous les fichiers demandés jusqu’ici, ce qui doit ressembler à ceci :

 

Ouvrez maintenant une invite de commande.

Faite glisser le fichier « wp.exe », qui est dans le dossier C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\Tools (chemin dépendant de l’installation sur votre machine).

Cela devrait ressembler à ceci :

Tappez maintenant  « install », qui permet de déployer votre application sur l’émulateur, puis faite glisser dans l’invite de commande le fichier « xap », coller le GUID copié précédemment, et enfin faites glisser le fichier thumbail et le fichier xml.

Terminez la commande avec l’instruction « /clean ».

Apuyez sur entrée : l’émulateur se lance et installe votre application automatiquement.

Lorsque le lancement de l’émulateur et l’installation de votre application est terminée, vous devez maintenant avoir l’écran d’accueil d’affiché sur votre émulateur :

 

Vous n’avez plus qu’à taper dans votre invite de commande la ligne comportant le « launch » : (en remplaçant bien sûr la  valeur après le launch par le GUID de VOTRE application) : 

 

Voici le résultat :

C#, Visual Studio 2010, Windows phone 7, WPF, XNA ,

Utiliser une API PHP en C#

1. April 2010 by Thomas.Trentin

Tutoriel : Utiliser une API PHP en C#.               

 

Sommaire :

- La classe WebClient,

- Méthodes utilisées,

- Récupérer une page web simple,

- Utilisation avec une API PHP,

- Utiliser UserState pour des traitements plus complexes

 

1.  La classe WebClient

 

définition MSDN :

« Fournit des méthodes communes pour envoyer et recevoir des données venant d’une ressource identifiée par URI. »

 

Comme la définition l’explique, un object WebClient peut être utiliser pour envoyer/recevoir des donnés, uploader ou télécharger des fichiers etc.

La plupart des methods de la classe ont un equivalent asynchrone (par exempe, UploadString à pour equivalent aynchrone UploadStringAsync). Cela peut se révéler très utile en cas de mauvaise connexion internet par exemple. En effet, tandis qu’une action synchrone bloque l’application, ce n’est pas le cas d’une opération asynchrone.

 

Voici l’espace de nom où se trouve notre classe WebClient :

 

CODE :    using System.Net;

 

 

Et voici la manière d’en instancer un nouveau :

 

CODE :    WebClient client = new WebClient();

 

 

Pour plus d’informations, reportez-vous à cette page MSDN.

 


 

2.     Méthodes utilisées pour notre tutoriel

 

Le but de ce tutoriel va être, afin de mieux vous expliquer l’utilité de WebClient, de récupérer des données à partir d’une API coté serveur (typiquement PHP ou ASP .NET). Nous allons ici simplement voir comment recevoir les données. Il sera de votre ressort de faire, coté serveur, le nécessaire pour envoyer les bonnes données.

 

En cherchant dans les méthodes disponibles pour notre classe WebClient, nous pouvons voir qu’il y a deux méthodes particulières de récupération de données qui correspondent à nos besoins :

-         DownloadString,

-         DownloadStringAsync.

 

Comme expliqué précédemment, DownloadString fait exactement la même chose que DownloadStringAsync, mais de manière synchrone.

 

Voici les prototypes de nos méthodes :

String DownloadString( [string|URI] );

Void DownloadStringAsync( URI [,object]);

 

DownloadString requête le serveur spécifié au travers des parameters envoyés (qui peuvent être une chaine, ou une URI), attend la réponse, et retourne une chaine de caractères. Donc si la requête prend beaucoup de temps à être traité par le serveur, votre application sera bloqué pendant ce temps.

DownloadString Async, lui, appelle le serveur spécifié en paramètre (qui doit être une URI), et attend la réponse dans un autre processus. Donc l’application n’est pas bloquée, même si la réponse n’est pas instantanée.

 

Une fois que la requête a été effectuée, nous devons créer une method qui va traiter le résultat.

Nous allons cette fois-ci utiliser l’événement de notre classe : DownloadStringCompleted

CODE : client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(   void (object, DownloadStringEventArgs) target  );

 

La méthode qui traitera la requête est de type void, et prend deux arguments (un object et un DownloadStringCompletedEventArgs).

Voici un exemple :

CODE:

WebClient apiClient = new WebClient();

          apiClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(apiClient_DownloadStringCompleted);

 

// sender = WebClient qui a appellé la méthode

// e contient le résultat de la requête

void apiClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)

{

     …

}

 

 

Lorsque l’application recevra la réponse du serveur, la méthode apiClient_DownloadStringCompleted sera appelée.

De plus, DownloadStringAsync prend un paramètre optionnel, de type object (vous pouvez donc lui transmettre ce que vous voulez), qui sera disponible dans notre event, via DownloadStringCompletedEventArgs.UserState.

Dans notre exemple, il serait accessible dans  e.UserState.

Nous verrons dans la prochaine partie comment l’utiliser

Exemple complet

 

Maintenant que nous avons comment se servir de notre classe WebClient et de ses méthodes/événements, c’est le moment de pratiquer.

Voici quelques exemples que nous allons réaliser :

-         Récupérer une simple page web,

-         Utiliser une API PHP,

-         Utiliser le UserState pour un usage plus avancé.

 


 

1.     Récupérer une simple page web


Voici l’application la plus simple que l’on puisse faire. Nous allons simplement récupérer la page de campus Booster avec un WebClient.

 

CODE:

 

void LaunchClient()

        {

            WebClient client = new WebClient();

            client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);

            client.DownloadStringAsync(new Uri("http://www.campus-booster.net/"));

        }

 

        void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)

        {

            if(e.Result!= string.Empty)

                 MessageBox.Show(e.Result);

        }

 

Si vous testez le code, vous verrez que nous avons bien récupéré le code source de notre plateforme favorite.

 

Ce n’est pas réellement utile pour l’instant, mais cela nous montre ce dont nous allons avoir besoin pour faire un puissant système de requête vers une API.

2.    

      Utilisation avec une API PHP

 

Considérons une page PHP à cette adresse :  http://mysite.com/api.php.

 

Si vous utilisez le code que nous avons vu précedemment, avec ce lien en paramètre, nous recevrons le code venant de notre fichier api.php. Et c’est exactement ce dont nous avons besoin !

 

Voici un exemple de code pour notre fichier api.php

PHP API (api.php) :

 

echo ‘Hello !’;

 

 

 

Si nous faisons une requête sur cette page, nous récupererons “Hello”. C’est un excellent début !

 

Maintenant, imaginons un scenario plus complexe.

Nous appelons l’URI suivante :

http://www.mysite.com/api.php?arg1=10&arg2=20

(Requête GET classique).

 

Nous pouvons faire, coté PHP, les traitements que nous voulons suivant les arguments reçus, et renvoyer une réponse adequate.

Donc, avec un WebClient, il deviant trés simple d’interagir avec une API PHP.

Il est également possible de faire des requêtes en POST, mais ce n’est pas le but de ce tutoriel.


 

3.     Utiliser UserState pour des traitements plus complexes

 

Voici la partie finale de ce tutoriel.

Nous avons appris les méthodes basiques de WebClient, comment récupérer le code source d’une page web, et comment réagir avec une API PHP.

Nous allons à présent rendre notre traitement plus simple dans le code C#, pour nos traitements plus complexes.

 

Pour rappel, voice le prototype de la method DownloadStringAsync :

Void DownloadStringAsync( URI [,object]);

 

Jusqu’à maintenant, nous savions simplement qu’il était possible d’ajouter un second paramètre, nous allons cette fois-ci, l’utiliser.

 

Considérons ce code :

CODE:

 

void LaunchClient()

        {

            WebClient client = new WebClient();

            client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);

            client.DownloadStringAsync(new Uri("http://mysite.com/api.php?arg=whatever"),"test");

        }

 

        void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)

        {

            if(e.Result!= string.Empty)

                 MessageBox.Show(e.Result);

           

            MessageBox.Show((string)e.UserState):

 

        }

 

Nous passons la chaine “test” à notre methode.

 

Si nous affichons e.UserState, cela nous marquera bien « test », puisque c’est ce que nous avons stocké dans l’UserState de DownloadStringCompletedEventArgs.

 

Mais cela n’est pas forcément utile.

 

Considérons le code suivant :

CODE:

 

Enum enState

{

    gettingID, gettingInfo, play

}

 

void LaunchClient()

        {

            WebClient client = new WebClient();

            client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);

            client.DownloadStringAsync(new Uri("http://mysite.com/api.php?arg=whatever"),enState.gettingID);

        }

 

        void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)

        {

            //if(e.Result!= string.Empty)

            //     MessageBox.Show(e.Result);

           

            switch ((enState)e.UserState)

            {

                case enState.play:

                    //traitement

                    break;

 

                case enState.gettingID:

                    // traitement

                    break;

 

                case enState.gettingInfo:

                    // traitement

                    break;

            }

        }

 

Nous pouvons donc, maintenant, suivant les informations que nous demandons à l’API, faire different traitements.

 

 

Nous avons vu comment utiliser WebClient, afin de communiquer avec des API serveur, et faire des traitements efficaces dans notre code C#, grâce à l’UserState.

 

C#, WPF