X3D教程:事件传递的概念
发布: 2007-9-22 11:34 |
作者: webmaster |
来源:
本站原创 |
查看: 236次
ROUTE的语法
由某个节点中的字段发送一个值,经由ROUTE,传至另一个节点中的某个字段,这样就是一次事件的传递,X3D中藉由事件的接收与发送而产生动态的行为。如下图,Event1 事件表示由 NodeA 节点中的 fieldA1 字段发送一个值,将 fieldA1 字段中的值传给 NodeC 节点中的 fieldC2 字段,如果写成X3D的语法会是:
<ROUTE fromNode="NodeA" fromField="fieldA1" toNode="NodeC" toField="fieldC2"/> |
其中,fieldA1 与 fieldC2 的资料型态必须要相同。
当传感器节点或 Script 节点产生起始事件,进而导致产生一连串的连锁事件时,所有的连锁事件都被视为同时发生。例如下图中 NodeA 节点所发送的 Event1 事件导致 NodeC 节点产生 Event2 事件,进而导致 NodeB 节点产生 Event4 事件,即便X3D浏览器实际上在执行时或许会有时间差,但理论上 Event1、Event2、Event4 这三个事件都是视为同时发生的。
如果节点中的字段发送事件给多个节点,或者接收来自多个节点中的事件,那这些事件也都被视为同时发生,如果您设定了这种ROUTE,要注意事件发生的顺序应该没有任何影响。例如下图中,NodeA 节点中的 fieldA1 字段分别发送事件给 NodeB 及 NodeC 节点,浏览器会认为 Event3 和 Event1 事件是同时发生的,同理,Event3 和 Event2 也是同时发生的。
事件发生时,除了传递的值之外,浏览器会自动给定该事件一个时间戳记,这个值是一个 SFTime,以表示事件所发生的时间。
字段的accessType(操作类型)
事件是从节点中的字段发送或接收,根据事件在字段中作用方式的不同,可将字段分成四种accessType:
· initializeOnly–可以有默认值,但该字段不得变更 · inputOnly–只能接收事件以改变字段中的值 · outputOnly–只能在字段中的值发生改变时传送事件 · inputOutput –可以是默认值,可以接收事件,也可以发送事件
字段命名规则
在命名自定节点或 Script 节点中的字段时请遵循以下规则: · 如果名称包含多个英文单字,第一个英文单字的第一个字母小写,其余英文单字的第一个字母大写,如addChildren · 如果不是以多个英文单字所组成的名称,所有 inputOnly 的字段名称使用 set_ 的前缀,如 set_fraction · 如果不是以多个英文单字所组成的名称,所有 outputOnly 的字段名称使用 _changed 的字尾,如 fraction_changed · 如果 outputOnly 字段的资料型态为 SFBool,使用is为前缀,例如 isFoo | |
|