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 76: Creare dei semplici Behavior: esempi.

 

ESEMPIO 1

L'esempio 'Esempio Behavior1' mostra la creazione e l'utilizzo di un semplice Behavior che permette di spostare un cubo nello spazio 3D mediante i tasti freccia, pageup, pagedown e 'r' (per 'reset').

 

Il Behavior, definito nella classe 'mioBehavior', è figlio di un TransformGroup (il 'target' del Behavior) che è a sua volta figlio del Branch Group agganciato al Simple Universe.

Il Behavior, provvisto del suo bound d'azione, viene quindi aggiunto allo Scene Graph attraverso il suo TG target.

Al Behavior che ci permette di muovere l'oggetto è associata una BoundingSphere, di centro l'origine e raggio 100.0, che definisce il luogo dello spazio ove il Behavior è valido.

 

NOTA: se il cubo e il Behavior si trovano a distanza 100 dall'origine, il Behavior sarà ancora valido, dunque sarà possibile spostare ancora il cubo (nel nostro caso, a 102), ma a questo punto, fuori dal bound, il Behavior non verrà più preso in considerazione da Java3D e non riusciremo più a muovere il cubo.

Vedremo, successivamente in questa stessa sezione, due modi per risolvere questo problema.

 

 

ESEMPIO 2

In alcuni videogiochi, specialmente fps, dopo aver aperto, ad esempio, una porta, trascorso un pò di tempo questa spesso si richiude da sola.

 

L'esempio 'Esempio Behavior2' mostra come implementare tale funzionalità: premendo il tasto 'e' si attiva l'apertura della porta (se questa non è già aperta); dopo pochi secondi, la porta si chiude da sola.

Il Behavior per questo esempio è definito nel file 'mioBehavior2'.

 

Tale esempio fa quindi uso di due condizioni di wakeup: WakeupOnAWTEvent (per la tastiera) e WakeupOnElapsedTime.

 

In initialization e alla fine di processStimulus, con il reset, viene specificato che gli eventi da tastiera devono essere accettati solo se la 'porta' è 'chiusa', ovvero se l'angolo di rotazione del cubo vale 0.

 

Se la porta è chiusa e viene premuto il tasto 'e', si modifica il TransformGroup che controlla il cubo e si lancia un evento WakeupOnElapsedTime, che verrà gestito dallo stesso Behavior, con apposite porzioni di codice.

 

L'esempio in esecuzione non mostra, in realtà, l'animazione della rotazione dell'oggetto, e questo proprio perchè bisognerebbe gestire, appunto, unaanimazione, operazione complessa, non ancora presa in esame, il cui codice potrebbe confondere il lettore nell'analisi del sorgente del file d'esempio; è possibile vedere però l'effetto del cambio dei valori di rotazione del TransformGroup osservando il colore delle faccia del ColorCube posta di fronte all'osservatore.

 

 
Vai all'inizio della pagina