Script节点

Script {

url [ ] # exposed field MFString
mustEvaluate FALSE # SFBool
directOutpur FLASE # SFBool

 

以下域可由用户定义任意多个:

eventIn eventTypeName eventName

field

fieldTypeName

fieldName  initialValue

eventOut

eventTypeName

eventName
 
url 脚本的URL或脚本。可能有多个值,浏览器执行第一个它 理解的脚本。
mustEvaluate 指出当浏览器不再需要脚本的输出时是否还要给脚本发输人事件。若为FALSE,浏览器有时可以提高其性能,因为当没有其它节点需要脚本的输出事件时,浏览器可以不发事件给脚本。除非脚本做了诸如访问网络这样一些浏览器无法识别的事,否则应该保留FALSE。
directOutpur 指出是否允许脚本直接改变场景节点和动态地建立或删除通路。换句话说,就是指出脚本是否只能通过事件的方法来与世界联系。如果不是十分必要的话,应设为FALSE,可便于浏览器对场景进行优化。
 
事件
Script 节点不能包含内置事件,但对于整个Script节点的输入输出事件可定义任意多个事件。
 
说明
    一个Script节点包含一个叫作script的程序。这个程序是以Javascript或Java写的。脚本可以接受事件,处理事件中的信息,还可以产生基于处理结果的输出事件。
    当一个Script节点接受一个输入事件时,它将事件的值和时间戳传给与输人事件同名的函数或方法。函数可以通过赋值给与事件同名的变量发送事件。一个输出事件与调用发出输出事件函数的输入事件有相同的时间戳。
    当一个脚本给另一个节点发出多个具有相同时间戳的事件时,另一个节点的类型将决定处理事件的顺序。总而言之,这个处理过程最接近用户期望的顺序。例如,如果用户的脚本向某个ViewPoint节点发出有相同时间戳的set_position和set_bind事件,浏览器在激活该视点之前会重新设置观点的位置。大多数情况下,用户最好忽略时间戳。
    一些脚本语言(包括Java,JavaScript)定义了有特殊意义的函数和方法。例如,如果用户提供了一个叫initialize()的函数,则当世界被装入时,首先调用这个函数。另外,如有shutdown()函数,则在删除世界时调用(例如当用户用Anchor选择了另一个世界时)。eventsProcessed()函数在一个或多个eventIn函数完成后被调用(由浏览器决定是完成每个eventIn函数后调用还是等所有输人事件都处理完了再调用)。

主页 节点说明 来信