VRML 2.0 consente di aggiungere un buon grado di interattività ai mondi realizzati, tramite l'impiego di sensori. I sensori sono, sostanzialmente, nodi in grado di rilevare gli eventi causati dal comportamento dell'utente. Ad esempio: il nodo TouchSensor rileva il "click" del mouse su un oggetto, mentre ProximitySensor e VisibilitySensor sono in grado di registrare rispettivamente caratteristiche quali la prossimità e la visibilità. Il funzionamento di base dei sensori è fondamentalmente comune. In questo capitolo si analizzerà il sensore TouchSensor.
Creare un interruttore con il nodo TouchSensor
Si vuole realizzare una semplice animazione il cui azionamento è gestito da
un interruttore. Cliccando su questo, si fa partire l'animazione, premendo l'interruttore
una seconda volta l'oggetto si ferma. Per catturare la pressione di un oggetto
da parte del mouse, si farà ricorso al nodo TouchSensor.
Il modo più semplice di controllare l'attivazione dell'animazione consiste, evidentemente, nel creare un meccanismo che ci permetta di gestire i valori del campo enabled all'interno del nodo TimeSensor. È infatti da questo nodo che dipende l'avviamento dell'animazione.
Utilizzare il nodo TouchSensor è molto semplice. Definito un certo oggetto, è sufficiente aggiungere il nodo TouchSensor nel campo children all'interno del quale l'oggetto stesso è stato definito:
[...]
# creazione e dichiarazione dell'interruttore
DEF interruttore transform {
translation -8 0 0
rotation 1 0 0 1.5
children [
Shape {
appearance Appearance {
material Material {emissiveColor 1 .5 0 }
}
geometry Cylinder {radius .5
height .1}
}
DEF interruttore TouchSensor {}
]
}
[...]
Come si può vedere, una volta definito il sensore all'interno del campo children, si rende l'oggetto sensibile alla presenza (e soprattutto alla pressione) del cursore del mouse. Quando l'utente cliccherà su di esso, il nodo TouchSensor manderà in uscita un evento isActive di tipo booleano (0 o 1).
A questo punto occorre fare in modo di inviare l'evento isActive del sensore al campo enabled del nodo TimeSensor. Si può ora vedere l'esempio completo: missile.wrl
Tutto sommato si tratta di un'operazione abbastanza semplice: le sostanziali novità riguardano la definizione del nodo TouchSensor e l'impiego del campo isActive.
Visualizzando il file all'interno del browser però si riscontra un inconveniente. L'interruttore non si comporta proprio come ci si aspetterebbe. Infatti, finché teniamo premuto l'interruttore, il "missile" viaggia. Ma non appena lo rilasciamo, l'animazione si interrompe.
Accade questo: il nodo TouchSensor in realtà invia 2 eventi: Uno corrisponde alla pressione del pulsante, l'altro al suo rilascio. Il nodo TimeSensor, di conseguenza, si attiva alla pressione e si disattiva al rilascio (quando isActive invia il valore 0).
Vedremo come risolvere questo problema nel prossimo capitolo, dove a supporto del VRML verrà impiegato Vrmlscript, un linguaggio di scripting molto simile a Javascript.
Open Graph Protocol, Facebook e il Web SemanticoCome sfruttare il Web Semantico "made in Facebook" |
Introduzione a RDFa - 2Arricchire un documento HTML con metadati semantici presi dal... |
Introduzione a RDFaCos'è e a cosa serve il linguaggio che potrebbe aprire il campo alle... |
Usare SVG per creare sfondi flessibili, scalabili e divertentiScopriamo cos'è il formato SVG e come possiamo usarlo in modo... |
Visualizzare i metadati RDF Dublin core con le trasformazioni XSLMettere insieme XSL, XPATH e le definizioni Dublin core per... |
Guida PodcastingUn percorso in 16 lezioni, per entrare nella filosofia del podcast... |
Guida Smil 2.0Un percorso pratico alla scoperta di SMIL: il linguaggio (XML) per... |
Guida Web serviceCosa sono, a cosa servono e come si creano servizi Web, i sistemi... |
Ogni mese, direttamente nella tua e-mail: articoli, guide, FAQ e approfondimenti sui linguaggi della famiglia XML.
Iscriviti alla newsletter