总体导航图
学习指南
主要内容
网页制作软件

当前位置: 多媒体应用基础 >> 网络多媒体应用设计>>时间检测器

2.时间检测器
    为了使方块能够连续旋转,需要引进等间隔连续发送的时间序列,这正是时间检测器的用武之地。时间检测器随着时间推移不断产生事件,可用于多种目的,包括: 
a. 驱动连续性的仿真和动画
b. 控制周期性的活动(如每分钟一次)
c. 初始化单独事件,如报警钟

     下面是我们要用的时间检测器和修改后的路由关系:
DEF ticker TimeSensor {
cleInterval 0.1 loop TRUE
enabled FALSE

}
ROUTE TouchS.isOver TO ticker.set_enabled
ROUTE ticker.cycleTime TO revolver.startRevolving
ROUTE revolver.revolve TO cube.set_rotation
     enabled用于启用和停用时间检测器,开始时它处于停用状态,以后由接触检测器的isOver事件修改这一状态。启用的时间检测器每隔0.1秒送出一个cycleTime事件,并用它来触发revolver的startRevolving事件,注意,cycleTime事件的类型为SFTime,而路由两端事件的类型必须匹配,所以尽管这里我们不关心这个事件表示的具体时刻,还是把revolver的startRevolving事件类型也改为SFTime.这样,revolver的函数startRevolving()就会每0.1秒调用一次,从而驱动方块连续旋转。

完整的代码是:
#VRML V2.0 utf8
DEF cube Transform {
rotation 1 1 1 0
children [ Shape{appearance Appearance {
material Material { diffuseColor 1 0 0 }}
geometry Box {} }
DEF TouchS TouchSensor {} ] }
DEF revolver Script {
eventIn SFTime startRevolving
eventOut SFRotation revolve field SFFloat angle 0
url "vrmlscript :
function startRevolving () {
revolve[0]=1;
revolve[1]=1;
revolve[2]=1;
revolve[3]=angle;
angle+=0.1; }" }
DEF ticker TimeSensor { cycleInterval 0.1
loop TRUE
enabled FALSE }
ROUTE TouchS.isOver TO ticker.set_enabled
ROUTE ticker.cycleTime TO revolver.startRevolving
ROUTE revolver.revolve TO cube.set_rotation


    上述脚本节点的功能比较简单,只是不断送出调整的旋转值,它是关键帧动画的一种。由于关键帧动画十分常用,故VRML专门定义了插补器节点来实现它。

相关知识点
VRML学习

精品展示

浏览器插件