The Xna-Way: Tutorial 14: Utente collegato ed X-Box Live pt1 Dati di base

Oggi voglio condividere alcune cose che ho provato riguardo alla gestione degli utenti XBox Live, come riconoscere se un utente ha fatto login, se ha fatto logout, chi è attualmente loggato, e le sue informazioni.

Questa sarà la prima parte di considerazioni, dovuto al fatto che alcune funzionalità sono esclusive per X-Box 360, come al gestione degli Avatar.
Riporto quindi qua solo quanto provato sotto piattaforma Windows.

Il metodo più semplice per recuperare le informazioni sull'untente attualmente collegato è tramite il seguente codice:

   1:  SignedInGamer gamer1 = Gamer.SignedInGamers[PlayerIndex.One];
Scrivendo questo, chiediamo di recuperare l'oggetto SignedInGamer relativo al giocatore che sta utilizzando il gamepad numero 1 (cosa simile si può fare con gli altri gamepad, fino all'indice 4).
Questa classe ci fornisce tutti metodi necessari per recuperare le informazioni del nostro giocatore.
Il problema però sorge quando non c'è nessuno giocatore che ha fatto log-in. In questo caso il codice precedente ci fornirà un null.
Sulla console questo si verifica quando lanciamo un gioco in modalità "anonima" possiamo dire, senza aver selezionato cioè il profilo che vogliamo usare.

Ma come possiamo fare, su pc, ad poter fare una cosa simile?
NOTA: per poter far funzionare correttamente il codice che segue, il LiveID che utilizzerete per fare log-in deve avere a disposizione un account Studente o superiore su App Hub, altrimenti andrete contro a delle spiacevoli eccezioni.

La prima cosa da fare è di aggiungere un GamerServicesComponent al nostro gioco. Possiamo farlo all'interno del costruttore del nostro Game:

   1:  Components.Add(new GamerServicesComponent(this));

Il primo passo è fatto. Ora dobbiamo far si che quando si effettua il login di un account si deve recuperare i dati, tra cui per ora ci occuperemo del nome della GamerTag e dell'immagine associata.
Aggiungiamo i seguenti campi alla nostra classe:

   1:  SignedInGamer gamer;
   2:  Texture2D image;
così facendo abbiamo definito dove andremo a memorizzare i dati recuperati.

Abbiamo bisogno di registrare un EventHandler per recuperare i dati del profilo quando viene completata la fase di login. Ecco un esempio di come può essere fatto:

   1:          void LoadGamer(object sender, SignedInEventArgs e)
   2:          {
   3:              gamer = e.Gamer;
   4:              //recupero lo stream per l'immagine
   5:              System.IO.Stream imgIO = gamer.GetProfile().GetGamerPicture();
   6:              //creo la texture2D a partire dallo stream
   7:              image = Texture2D.FromStream(GraphicsDevice, imgIO);
   8:          }
mentre nel costruttore, dopo la creazione del GamerServicesComponent, andiamo a registrare il nostro handler come segue:
   1:  SignedInGamer.SignedIn += new EventHandler<SignedInEventArgs>(LoadGamer); 

Il nostro metodo Draw sarà semplicissimo!
   1:          protected override void Draw(GameTime gameTime)
   2:          {
   3:              GraphicsDevice.Clear(Color.CornflowerBlue);
   4:   
   5:              spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
   6:              if (gamer != null)
   7:              {
   8:                  spriteBatch.DrawString(myFont, gamer.Gamertag, Vector2.Zero, Color.Black);
   9:                  spriteBatch.Draw(image, new Vector2(0,30), Color.White);
  10:              }
  11:              spriteBatch.End();
  12:   
  13:              base.Draw(gameTime);
  14:          }

Ok vediamo di riassumere: creiamo il nostro EventHandler, il quale serve a recuperare i dati del Gamer che fa login (quindi la GamerTag, la sua immagine, i suoi Ack, la lista dei suoi amici, etc). Questo Handler viene chiamato quando il login viene completato con successo. E dopo di questo verrano visualizzate dal metodo Draw il nome della GamerTag e la sua immagine.

Ecco ora a voi alcuni screenshot! (sono relativi alla versione che ho fatto girare sotto Windows 7, quindi sulla console potrebbero essere "leggermente" differenti)
Una volta fatto partire il gioco premete il tastone centrale del vostro pad (o il tasto Home sulla tastiera). E quello che vedrete sarà più o meno questo:
Dopo che avrete accettato le condizioni d'uso, andate su "Accedi", dove avrete una schermata come la seguente:
Inserite i dati del vostro LiveID (che vi ricordo deve disporre di un account Studente o superiore su Abb Hup per essere provato con successo da chi scrive il codice), e avrete che inizierà la procedura di login (io ho anche spuntato l'opzione per fare in modo che ogni volta effettui l'accesso in automatico).
Quando il login sarà completo vi verrà notificato con un messaggio!
Se fate come me, e avete messo il login automatico dell'account (in modo da non dover rifare la procedura a mano ogni volta), se riavviate l'applicazione ed aspettate qualche secondo, ecco cosa vedrete (salvo GamerTag diversa XD):

Ora le basi ci sono! Potete sbizzarrirvi!

Spero di esservi stato utile!
A presto :)

0 commenti:

Donazioni

My Menu'