XML  »  Guide  »  Guida VRML 

L'interattività in VRML: il nodo TouchSensor



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.

Ultimi articoli XML

Open Graph Protocol, Facebook e il Web Semantico

Come sfruttare il Web Semantico "made in Facebook"

Introduzione a RDFa - 2

Arricchire un documento HTML con metadati semantici presi dal...

Introduzione a RDFa

Cos'è e a cosa serve il linguaggio che potrebbe aprire il campo alle...

Usare SVG per creare sfondi flessibili, scalabili e divertenti

Scopriamo cos'è il formato SVG e come possiamo usarlo in modo...

Visualizzare i metadati RDF Dublin core con le trasformazioni XSL

Mettere insieme XSL, XPATH e le definizioni Dublin core per...

Altri articoli

Guide XML

Guida Podcasting

Un percorso in 16 lezioni, per entrare nella filosofia del podcast...

Guida Smil 2.0

Un percorso pratico alla scoperta di SMIL: il linguaggio (XML) per...

Guida Web service

Cosa sono, a cosa servono e come si creano servizi Web, i sistemi...

Altre guide

Newsletter @XML

Ogni mese, direttamente nella tua e-mail: articoli, guide, FAQ e approfondimenti sui linguaggi della famiglia XML.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Nessun corso previsto

Nessun corso previsto