KeySensor、KbdSensor是在vrml97标准之外扩展的节点,目前已经正式收入到X3D的标准当中,主要用于响应用户键盘按键操作,来对你的程序进行任意的控制。BS/Blaxxun浏览器对应的是KeySensor节点,Contvrml浏览器(插件)对应的是KbdSensor.
以KeySensor为例,首先来看一个例子,按下A键,发出声音:
KeySensor不断的检测用户的键盘输入,一旦有字符键按下,KeySensor便获得这个字符的UTF-8编码值,将之转换为10进制整数,通过事件出口keyPress发送出来,通过路由传递到脚本节点keyscript的事件入口keynum,这个事件入口一旦接收到值,脚本节点就会执行这个事件入口的同名函数function keynum(value)。
域 描述,以KeySensor为例,KbdSensor类似:
| eventsProcessed | 如果设置为TRUE,浏览器的默认键盘动作将不被执行,这个标志位事件告知浏览器所有的事件将被keySensor节点处理。 |
| enabled | 设置允许使用这个传感器的标志 |
| keyPress | 这个事件出口在键盘上的任意字符按键被按下的时候发生,它的值是用户按下的键所代表的UTF-8字符的十进制整型数值 |
| keyRelease | 这个事件出口在键盘上的任意字符按键被释放的时候发生,它的值是用户释放的键所代表的UTF-8字符的十进制整型数值 |
| actionKeyPress | 当任意“非字符”键被按下时产生,它的值请对应参考下表 |
| actionKeyRelease | 当任意“非字符”键被释放时产生,它的值请对应参考下表 |
| shiftKey_changed | shift键状态改变时发送,按下为TRUE,释放为FALSE |
| controlKey_changed | ctrl键状态改变时发送,按下为TRUE,释放为FALSE |
| altKey_changed | alt键状态改变时发送,按下为TRUE,释放为FALSE |
| isActive | 活动标志,当有事件发生时为TRUE |
| character | 在用户按下任意字符键时发送出这个字符键所代表的字符 |
ActionKey编码,KbdSensor与其不同,可用print()函数测试;
| Key | Value |
| Home | 1000 |
| End | 1001 |
| PageUp | 1002 |
| PageDown | 1003 |
| Up | 1004 |
| Down | 1005 |
| Left | 1006 |
| Right | 1007 |
| F1-F12 | 1008-1019 |
用KbdKensor类似,注意键盘值和KeySensor的不一样,帮助文档在http://www.parallelgraphics.com/developer/products/cortona/extensions/keyboard/
本文介绍如何使用KeySensor和KbdSensor实现VRML场景中的键盘事件响应。通过具体示例展示了如何捕捉键盘输入,并触发相应的场景变化,如播放声音等。
2812





