Top

Come sviluppare un’Interfaccia touch Multiutente per Windows

share-galaxytab4

Ci sono diverse situazioni in cui possiamo ipotizzare l’uso di un dispositivo touch screen da più utenti simultaneamente ma, nel momento in cui scriviamo, il touchscreen non è in grado di attribuire un singolo comando all’utente corrispondente, è solo in grado di registrare l’azione multipla, senza discernere il fatto che venga da due input diversi.

In un gioco da tavolo virtuale, come possono essere la dama o gli scacchi, dove le mosse degli utenti si avvicendano, non è importante stabilire chi abbia effettuato i tocchi, può essere anche un unico utente ad giocare contro se stesso oppure quattro giocatori che si avvicendano. Ai fini del gioco comunque non è importante capire chi abbia fatto quella determinata mossa.

Ci sono giochi e situazioni per cui è invece importante stabilire chi ha lanciato quel determinato comando (come i giocatori di ping pong del video sottostante)ed è compito dello sviluppatore progettare il modo più efficace per determinare quale tocco corrisponde a quale utente. Al momento purtroppo le API di Windows per gli sviluppatori forniscono scarso supporto per le applicazioni touch based multiutente, ma non è difficile per gli sviluppatori implementare metodi alternativi per il monitoraggio dei vari touch.

Il modo più semplice è quello di dividere il touchscreen in aree separate, una per ogni utente. Vedremo insieme degli strumenti che l’API di Windows offre a supporto delle touch app.

Creare un gioco Multiutente con le API di Windows

Le API di Windows, in questo preciso momento, offrono due formati di base per gli input tattili:

1. WM_TOUCH (la domanda deve elaborare ed interpretare i punti di contatto).
2. WM_GESTURE (la domanda è generata dai gesti predefiniti del sistema come zoommare, trascinare, toccare ecc), ma questo purtroppo supporta al momento solo gli input da singolo utente.

Il classico gioco del ping pong, un evergreen degli arcade, è l’esempio perfetto per un gioco creato con lo scopo di monitorare gli input da almeno due utenti. La palla infatti viaggia in diagonale da una parte all’altra dello schermo e viene controllata dagli input touch degli utenti che muovono la “racchetta virtuale”.
In questo caso il movimento della palla è gestito in un thread separato nell’applicazione, questo per garantire un movimento fluido al gioco.

L’interfaccia touch a due utenti

Come dicevamo all’inizio, il modo più semplice di monitorare l’input touch da due utenti diversi è quello di dividere l’area di gioco (lo schermo) in due metà, il giocatore uno a sinistra, il giocatore due sulla destra.
Ogni volta che si verifica l’evento WM_TOUCH noi possiamo recuperare l’elenco completo delle possibili coordinate di contatto, come nell’esempio di codice uno.

bret = GetTouchInputInfo(
(HTOUCHINPUT)lparam,
data.geometry_data.touch_inputs_count,
data.geometry_data.touch_inputs,
sizeof(TOUCHINPUT)
);
assert(bret != FALSE);
//-----------------------------------------------------------------
// process touch inputs
//-----------------------------------------------------------------
for(i = 0; i < data.geometry_data.touch_inputs_count; i++) { touch_input = &data.geometry_data.touch_inputs[i]; //----------------------------------------------------------------- //Convert 100ths of pixels to pixels //----------------------------------------------------------------- x = touch_input->x / 100;
y = touch_input->y / 100;)
{


Il passaggio successivo è quello di controllare e vedere in quale metà del campo/schermo è stato registrato il tocco e aggiornare la posizione verticale della “racchetta” virtuale perché corrisponda a quella del punto di contatto. In questo modo possiamo gestire i due input diversi.

if (x < (ULONG)((data.graphic_data.rect.right – data.graphic_data.rect.left) / 2))
{
//-----------------------------------------------------------------
// 2-player touch division
//-----------------------------------------------------------------
Data.geometry_data.p1y = y;
}else{
Data.geometry_data.p2y = y;
}
bret = move_paddles(&data);
assert(bret == TRUE);
{

Anche se tutti gli input sullo schermo vengono elaborati, viene utilizzato solamente il più recente punto di contatto attivo per determinare la posizione della racchetta virtuale.

Da ultimo vi lascio a questo interessante approfondimento se siete interessati a scoprire anche come impostare il monitoraggio degli input touch a quattro utenti.
Fateci sapere nei commenti se avete provato ad utilizzare questa guida e quali sono state le vostre impressioni.

email
Related Posts Plugin for WordPress, Blogger...

Non perdere l'opportunità di ricevere il meglio di Ziogeek!


Commenti


Fatal error: Uncaught Exception: 12: REST API is deprecated for versions v2.1 and higher (12) thrown in /home/ziogeek/public_html/wp-content/plugins/seo-facebook-comments/facebook/base_facebook.php on line 1273