6.7 - TouchSensor
O nó TouchSensor acompanha a localização e estado do mouse e monitoriza a manipulação dos objetos gráficos associados ao sensor, gerando eventos de acordo com esta manipulação. É essencial para permitir o controle da evolução da cena pelo utilizador.
Detecta a interação do mouse com as geometrias. Quando o mouse é movido sobre o objeto, um evento isOver gera sinais TRUE, e quando o mouse é movido para fora da superfície do objeto o evento isOver gera sinais de FALSE. Se algum dos botões é clicado enquanto isOver for TRUE, então isActive gera sinais TRUE. Quando o botão for solto, isActive gera sinais FALSE. O eventOut touchTime é enviado quando um botão é clicado e solto sobre a geometria. Se o cursor é removido antes do botão ser solto, o evento não será enviado. Sua sintaxe é:
TouchSensor {
......enabled TRUE
......hitNormal_changed
......hitPoint_changed
......hitTexCoord_changed
......isActive
......isOver
......touchTime
}
Um exemplo de interação: quando pressionamos um botão do mouse sobre os nós associados a um TouchSensor, este gera o evento touchTime - o instante em que o botão foi pressionado. Outro exemplo: se passarmos com o mouse sobre os mesmos nós, o sensor gera um evento isOver que indica que o rato se encontra sobre os objetos.
Exemplo 58: - Uma esfera que passa a ser iluminada por uma luz vermelha (inicialmente apagada) quando o mouse passa por cima da esfera.
Shape {
......appearance Appearance {
............material Material {
..................diffuseColor 1 1 1
............}
......}
......geometry Sphere {
............radius 2.0
......}
}
DEF PL PointLight {
......color 1 0 1
......on FALSE
......location 7 0 7
}
DEF TS TouchSensor {
......enabled TRUE
}
ROUTE TS.isOver TO PL.set_on
Exemplo 59: - Animação com o ColorInterpolator
Group {
children [
Shape {
appearance Appearance {
material DEF theColor Material {
diffuseColor 1 0 0
} # end material
} # end appearance
geometry Sphere {
radius 2
} # end geometry
} # end shape
DEF toucher TouchSensor {
enabled TRUE
} # end toucher
] # end children
} # end group
DEF timer TimeSensor {
loop FALSE
cycleInterval 1
}
DEF colorChanger ColorInterpolator {
key[ 0 .25 .50 0.75 1 ] # end key
keyValue [
1 0 0
1 0 0
0 0 1
0 0 1
1 0 0
] # end keyValue
} # end colorChanger
ROUTE toucher.touchTime TO timer.startTime
ROUTE timer.fraction_changed TO colorChanger.set_fraction
ROUTE colorChanger.value_changed TO theColor.set_diffuseColor
Exemplo 60: - Animação com o OrientationInterpolator acionadas por sensor de toque ( TouchSensor )
#VRML V2.0 utf8
# The VRML 2.0 Sourcebook
# Copyright (c) 1997
# Andrea L. Ames, David R. Nadeau, and John L. Moreland
# A cube that spins when the viewer's cursor moves over it
Group{
children [
# Cubo que gira quando o usuário clica sobre ele
DEF Cube Transform {
children Shape {
appearance Appearance {
material Material { }
}
geometry Box { }
}
},
# Sensor, detecta quando o usuário clica em um objeto
DEF Touch TouchSensor { },
# relógio para controlar a animação
DEF Clock TimeSensor {
enabled FALSE
cycleInterval 4.0
loop TRUE
},
# Caminho da animação (movimento)
DEF CubePath OrientationInterpolator {
key [0.0, 0.50, 1.0]
keyValue [
0.0 1.0 0.0 0.0,
0.0 1.0 0.0 3.14,
0.0 1.0 0.0 6.28
]
}
]
}
# Rotas
ROUTE Touch.isOver TO Clock.set_enabled
ROUTE Clock.fraction_changed TO CubePath.set_fraction
ROUTE CubePath.value_changed TO Cube.set_rotation