NOTA! Questo sito utilizza i cookie e tecnologie simili.

Se non si modificano le impostazioni del browser, l'utente accetta. Per saperne di piu'

Approvo

Capitolo 148: Animazione mediante Thread: un semplice esempio.

 

L'esempio 'Simulatore1' mostra come utilizzare i thread di Java per creare facilmente una semplice applicazione in grado di recuperare gli eventi da tastiera ed aggiornare di conseguenza sia il SimpleUniverse che la GUI, generando, tra l'altro, animazioni che non fanno uso degli interpolatori.

 

Una volta avviata l'applicazione viene mostrato un frame con una Canvas3D ed un universo virtuale popolato da pochi elementi.

L'idea è quella di simulare la navigazione nell'universo 3D mediante una navicella dotata di un 'motore' di potenza regolabile che spinge in avanti l'osservatore.

 

 

E' presente un behavior personalizzato per il controllo degli eventi generati da tastiera.

 

Alla pressione del tasto +, si ha un aumento della potenza del 'motore' e l'utente (ossia, il punto di vista dell'osservatore) viene spostato in avanti di una data quantità.

La velocità di spostamento dipende dal valore di 'potenza reattore', una quantità che può assumere valori tra 0 e 110 (iniziale = 0), a 'passi' di 10 (dunque i tasti + e incrementano e decrementano il valore di 'potenza reattore' di 10).

 

Attenzione: la velocità di spostamento non è uguale a questo vettore ma il VETTORE DELLO SPOSTAMENTO viene calcolato a partire da tale valore... ciò lascia spazio a calcoli più elaborati, che tengano conto di altri fattori (ad esempio, la gravità).

Dovendo gestire una sola variabile di 'stato del gioco' non ho ritenuto necessario dover creare un oggetto 'statodelgioco', necessario invece per tenere conto di più fattori in maniera efficiente.

Un semplice schema degli elementi presenti nell'applicazione è mostrato nell'immagine seguente.

Java 3D Schema programma simulatore volo

 

E' possibile notare come all'avvio del programma vengano creati ed avviati due thread: il primo, 'ThreadFrame', si occupa di gestire la GUI (rappresentata da 'FrameSimulatore', 'mioBehaviorTastiera' e 'Scena3D' (che crea il ContentBranchGraph), ossia aspetto grafico ed eventi generati da tastiera), mentre 'ThreadControllo' non fa altro che verificare il valore di 'potenza reattore' e muovere, di conseguenza, la posizione dell'osservatore.

'ThreadControllo' effettua il suo ciclo ogni secondo (ma è possibile abbassare il tempo che intercorre tra un ciclo e l'altro modificando il parametro di Thread.sleep(tempo in millisecondi)).

 

'ThreadFrame' avvia il Frame e, di conseguenza, la classe mioBehaviorTastiera e Scena3D.

'Scena3D' crea un universo virtuale provvisto di griglia di riferimento per identificare il piano XZ e di due coni (posizionati a (0.0f, 0.0f,5.0f) e (0.0f, 0.0f,15.0f)).

Java 3D Schema thread controllo per simulatore volo

La classe 'mioBehaviorTastiera' fornisce un behavior personalizzato che reagisce alla pressione di alcuni tasti.

I comandi per l'interazione da tastiera sono mostrati nella figura seguente.

Java 3D Comandi Behavior per pilotare il simulatore di volo

 

E' quindi possibile utilizzare la posizione e l'orientamento dell'utente/osservatore mediante i tasti freccia e WASD.

A questo movimento, che dipende dall'utente, va sommata la traslazione in avanti effettuata autonomamente dal programma se il valore di 'potenza reattore' è maggiore di 0 (valore che può essere incrementato o decrementato, in una scala che va da 0 a 110, mediante i tasti + e ; il valore massimo è stato impostato a 110 per motivi ''', in quanto questa era la velocità raggiungibile con i postbruciatori accesi nella maggior parte dei simulatori di volo).

Provate, ad esempio, a ruotare l'osservatore verso il basso e a destra e a premere il tasto +.

Java 3D Screenshot simulatore di volo di prova

 

Tutto il programma ha un flusso di esecuzione un pò folle che serve però ad illustrare come combinare Behavior per l'interazione da tastiera (con animazioni proprie) e thread concorrenti (con un thread che può modificare alcune proprietà dell'universo virtuale).

 

 
Vai all'inizio della pagina