1
Vote

Profili

description

Nel menu principale, in un angolo libero, scrivere una cosa tipo
 
"Hello <x>" dove x è il nome dell'ultimo giocatore a fare login. Se non c'è un nome, deve poter essere inserito all'avvio dell'applicazione (dando la possibilitá a chi ha fretta di inserire come nome "default1", "default2", ...). Accanto o sotto scrivere anche "Not <x>? Click here!" che lancia la schermata di inserzione del nome nuovo.
 
Questa funzionalitá deve essere altamente generale e deve far parte di uno (o piú game components) del tutto indipendenti dal gioco principale.

file attachments

comments

giuseppemag wrote Jul 18, 2010 at 7:02 AM

Un dettaglio: usare come input sia la virtual keyboard basata su touch, che la tastiera fisica (diciamo "in OR" tra loro).

wrote Jul 18, 2010 at 7:51 AM

wrote Jul 19, 2010 at 9:53 AM

GiGreco wrote Jul 19, 2010 at 4:03 PM

Uso l'Isolated storage per salvarmi il profilo, quindi converto un eventuale stringa contenente il nome in byte e uso gli stream per scrivere dentro un file ".ps".
E' il procedimento giusto? Questa implementazione mi da alcuni problemi, vorrei trovare un modo migliore, conosci qualche link per l'Isolated storage per WP7 e per il text input per la Virtual Keyboard?

giuseppemag wrote Jul 19, 2010 at 5:56 PM

Si, ma probabilmente ti conviene usare la serializzazione/deserializzazione XML (http://sharpertutorials.com/serialization/). Ti crei una struttura dati che abbia la forma dei dati da salvare, con tanto di liste e in generale quello che vuoi. Quando hai uno stream invece che scrivere direttamente sul file serializzi o deserializzi la tua struttura dati. È molto piú facile e se il formato cambia cambi solo la tua classe invece che anche il codice...

Per la Virtual Keyboard non vi avevo giá mandato un esempio di sorgente? Comunque andrebbe trattata come i component di cui parlavamo in una mail, facendo comparire la virtual keyboard sopra la scena e disattivando tutti i component attivi in quel momento. Quando si clicca la [X] o l'OK della VKB allora questa si disattiva (invocando this.Dispose) e invoca Enable=true su tutti i componenti che aveva disattivato prima!

GiGreco wrote Jul 20, 2010 at 3:08 PM

Non ricordo di un esempio sorgente di Virtual Keyboard, se ce l'hai passato per IoTu e' probabile che sia andato perso, potresti rimandarcelo?
Il serializzatore funziona bene, implementato e testato, ora sorge il problema di se avere più file .Xml per tipo di dato, quindi un file per i Profili, per i Settings, Partita salvata, e via dicendo..
Inoltre ci conviene mantenere un unico file Xml (esempio un unico file con tutti i profili o un file singolo per ogni profilo)? Come siamo messi per memoria fisica del cellulare? Ci vorrà una sorta di Clean-Up dopo un tot di memoria occupata?
Stiamo cercando un sistema più corposo che ci permetta di gestire la creazione e gestione di più file Xml, in modo, più facile, durante le varie fasi del gioco. Qualche idea?
grazie

GiGreco wrote Jul 21, 2010 at 8:37 AM

Molti discussioni suggeriscono di "emulare" una textbox creando un rectangle + texture e farci scrivere dentro il testo. Mi chiedo se sia la strada migliore da seguire. Qualche idea?

wrote Jul 21, 2010 at 9:25 AM

giuseppemag wrote Jul 21, 2010 at 9:25 AM

Yes, è una ottima strada...

Ti allego la virtual keyboard che abbiamo usato in un altro game!

gperoni wrote Aug 6, 2010 at 2:44 PM

Stiamo provando la tastiera virtuale inclusa nel framework, quella che si richiama tramite la funzione Guide.BeginShowKeyboardInput. Bisogna però istanziare un Component di tipo GamerServicesComponent prima di poter richiamare questa funzione e ci viene lanciata un'eccezione di tipo GamerServicesNotAvailableException. Sul forum, a questa pagina:
http://forums.xna.com/forums/t/7604.aspx
abbiamo letto che non tutte le distribuzioni di XNA supportano il GamerServicesComponent. E' vero?
Secondo te ci conviene costruire una nostra tastiera virtuale come avete fatto voi per l'altro gioco? Possiamo usare la vostra?

giuseppemag wrote Aug 6, 2010 at 3:32 PM

Yes, usate una tastiera custom. Mi sa che ci sono problemi con WP7 e i gamer services (almeno per ora, ma non si sa mai)...

La tastiera custom potete tranquillamente usare quell'altra, dovrei avervela giá mandata. Disegna i tasti e legge l'input. Addirittura potete usare semplicemente il vostro sistema di bottoni, creando un bottone per tasto e facendo i bottoni piccoli e vicini tra loro :)

gperoni wrote Aug 9, 2010 at 9:14 AM

Gianpaolo sta facendo una tastiera virtuale usando i nostri Button. Dovrebbe essere quasi pronta.

GiGreco wrote Aug 10, 2010 at 11:23 AM

La tastiera è a un passo dall'essere ultimata, devo solo risolvere il seguente problema:

Mi creo i bottoni con questo codice, il click su un bottone genera un evento che prende il "message" del bottone e lo assegna ad una stringa.

for (int i = 1; i < 27; i++)
       {
          keyboard_buttons[i] = new Button(Game, @"Images//Menu//button_play", new Rectangle((int)bounds.X + 70 + (x * (i - y)), 370, 50, 50), "large_font", "" + WordArray[i - 1]);
                AddButton(keyboard_buttons[i], () =>
              {
                   word = "" + keyboard_buttons[i].message;  
               }); 
           ....
       }
Il problema e che quando clicco su uno dei pulsati creati va in break, questo perché la variabile "i" che si trova in "word = "" + keyboard_buttons[i].message" risulterà sempre uguale a 27. (valore di i di fine ciclo).
(Assegnando a word un valore statico, il tutto funziona, ma dovrei creare 27 pulsanti.. non è in discussione!)

La soluzione pensata potrebbe essere di inserire un codice del genere dentro l'Update del component, ma la tapposition è gestita dalla BaseMenu e non funziona:
...
var screenTransform = Game.GetContext().ScreenTransform;
  foreach (var cb in buttons)
  {
    if(cb.b.IsInBounds(tapPosition.ToPoint(screenTransform)))
      word = cb.b.message;
  }
...

Potresti indicarmi una soluzione o una via da seguire?

giuseppemag wrote Aug 11, 2010 at 9:29 PM

Quando scrivi:

for (int i = 1; i < 27; i++)
{
keyboard_buttons[i] = new Button(Game, @"Images//Menu//button_play", new Rectangle((int)bounds.X + 70 + (x * (i - y)), 370, 50, 50), "large_font", "" + WordArray[i - 1]);
AddButton(keyboard_buttons[i], () =>
{
word = "" + keyboard_buttons[i].message;
});
....
}


tutti i delegate si memorizzano il valore della variabile i. Siccome i quando il for termina vale 28, tutti i delegate quando invocati riferiranno keyboard_buttons[i].message = keyboard_buttons[28].message;

se nel for scrivi un banalissimo:

for (int i = 1; i < 27; i++)
{
var curr_i = i;
keyboard_buttons[i] = new Button(Game, @"Images//Menu//button_play", new Rectangle((int)bounds.X + 70 + (x * (i - y)), 370, 50, 50), "large_font", "" + WordArray[i - 1]);
AddButton(keyboard_buttons[i], () =>
{
word = "" + keyboard_buttons[curr_i].message;
});
....
}

allora i delegate accederanno al loro specifico curr_i, che è quello giusto!

wrote Feb 2, 2013 at 1:16 AM