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 74: I Behavior.

 

Behavior è una classe astratta che eredita da LEAF, dunque le sue implementazioni verranno rappresentata mediante un triangolo nello Scene Graph e non potranno avere figli (sempre in termini di oggetti dello Scene Graph).

 

Il compito di un Behavior è quello di modificare lo Scene Graph in base a stimoli prodotti dall'utente (limitatamente alle possibilità fornite dalle capability dei vari oggetti, che devono essere correttamente impostate).

 

 

Figli di Behavior sono, ad esempio:

  • Billboard;

  • Interpolator;

  • KeyNavigatorBehavior;

  • LoD;

  • Mouse6DPointerBehavior;

  • MouseBehavior;

  • PickMouseBehavior;

  • ViewPlatformBehavior.

In questa sezione prenderemo in esame i Behavior di mouse e tastiera.

 

 

 

Concetti chiave, di base di un Behavior, e che si tradurranno in metodi da implementare, sono initialization e processStimulus.

 

initialization viene invocato solo una volta: quando il Behavior prende vita, insieme al resto del mondo virtuale; si tratta, proprio come dice il nome, dell'inizializzazione di questo componente.

 

 

processStimulus viene invocato quando si verifica un evento; il metodo si occupa anche di decodificare i messaggi in input per capire quale evento si è verificato ed agire di conseguenza.

 

Un altro elemento di Behavior è la scheduling region: si tratta di una regione dello spazio 3D che definisce il 'raggio d'azione' del Behavior.

 

Un Behavior è attivo (ossia: può ricevere stimoli, effettua azioni) se la regione di attivazione della View Platform interseca quella del Behavior.

Ad ogni modo, per poter portare ad una conseguenza, un'azione deve agire su una wakeUpCondition del Behavior.

Se più Behavior possono essere risvegliati dalla stessa condizione, è possibile specificare l'ordine di esecuzione delle risposte mediante lo schedulingInterval.

 

Infine, il trigger : si tratta di una o più condizioni WakeupCondition.

Il trigger di un Behavior viene inizializzato per la prima volta da initialization, ma deve essere resettato esplicitamente alla fine del metodo processStimulus.

 

Behavior è una classe astratta.

All'atto di scrivere un proprio Behavior, bisogna definire almeno un costruttore e riscrivere initialization e processStimulus.

Ricapitolando, ecco come funziona la gestione degli eventi mediante Behavior:

  • all'atto della creazione, viene richiamato initialization;

  • 'quando succede qualcosa' nel bound d'azione del Behavior, viene richiamato processStimulus, e...

  • ...si fa un controllo: l'evento che si è verificato è tra quelli gestiti dal Behavior ? Si scorre quindi l'elenco dei trigger (le condizioni di wakeup del Behavior) e, se sì, viene eseguita l'azione definita nel blocco di codice relativo presente in processStimulus.

 

A questo punto abbiamo visto cos'è un Behavior e come è composto, ma non come agisce.

Ad un Behavior è associato un Transform Group 'target' (che poi nello Scene Graph sarà collegato al Behavior), un bersaglio le cui proprietà possono essere modificate dal Behavior.

Ad un Behavior è possibile associare più TG, quindi la relazione tra i due non è di tipo padre-figlio; non è neanche una vera e propria Reference, in quanto non vi è un metodo setBehavior o qualcosa di simile: semplicemente, si passa il riferimento ad un TG mediante il costruttore o altri metodi del Behavior.

 

All'interno di processStimulus si renderà poi necessario distinguere gli eventi che attivano il Behavior e scrivere il codice che effettua le relative azioni.

 

 
Vai all'inizio della pagina