VRML响应键盘事件——KeySensor/KbdSenSor扩展节点
2010-06-08 02:06
267 查看
KeySensor、KbdSensor是在vrml97标准之外扩展的节点,目前已经正式收入到X3D的标准当中,主要用于响应用户键盘按键操作,来对你的程序进行任意的控制。BS/Blaxxun浏览器对应的是KeySensor节点,Contvrml浏览器(插件)对应的是KbdSensor.
以KeySensor为例,首先来看一个例子,按下A键,发出声音:
KeySensor不断的检测用户的键盘输入,一旦有字符键按下,KeySensor便获得这个字符的UTF-8编码值,将之转换为10进制整数,通过事件出口keyPress发送出来,通过路由传递到脚本节点keyscript的事件入口keynum,这个事件入口一旦接收到值,脚本节点就会执行这个事件入口的同名函数function keynum(value)。
域 描述,以KeySensor为例,KbdSensor类似:
ActionKey编码,KbdSensor与其不同,可用print()函数测试;
用KbdKensor类似,注意键盘值和KeySensor的不一样,帮助文档在http://www.parallelgraphics.com/developer/products/cortona/extensions/keyboard/
以KeySensor为例,首先来看一个例子,按下A键,发出声音:
]#VRML V2.0 utf8 #添加外部扩展声明 EXTERNPROTO KeySensor [ eventIn SFBool eventsProcessed exposedField SFBool enabled eventOut SFBool isActive eventOut SFInt32 keyPress eventOut SFInt32 keyRelease eventOut SFInt32 actionKeyPress eventOut SFInt32 actionKeyRelease eventOut SFBool shiftKey_changed eventOut SFBool controlKey_changed eventOut SFBool altKey_changed eventOut SFString character ] ["urn:inet:bitmanagement.de:node:KeySensor"] #节点实例,可写在任意位置 DEF key KeySensor {enabled TRUE Group { children [ DEF ts TimeSensor { loop TRUE cycleInterval 3.333 }, # Middle C (C4) DEF C4 Transform { children [ DEF WhiteKey Shape { appearance Appearance { material Material { } } geometry Box { size 0.23 0.1 1.5 } }, Sound { source DEF PitchC4 AudioClip { url "tone1.wav" pitch 1.0 } } ] }, ] } #节点脚本 DEF keyscript Script { eventIn SFInt32 keynum eventOut SFTime C4 eventOut SFTime stop url "javascript: function keynum(value,time) { #当按下'A'键时响应 if(value==65) { C4=time; stop=C4+0.2; } } " } #建立KeySensor事件出口和脚本事件入口的连接 ROUTE key.keyPress TO keyscript.keynum ROUTE keyscript.C4 TO PitchC4.startTime ROUTE keyscript.stop TO PitchC4.stopTime
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 | 在用户按下任意字符键时发送出这个字符键所代表的字符 |
Key | Value |
Home | 1000 |
End | 1001 |
PageUp | 1002 |
PageDown | 1003 |
Up | 1004 |
Down | 1005 |
Left | 1006 |
Right | 1007 |
F1-F12 | 1008-1019 |
]#VRML V2.0 utf8 EXTERNPROTO KbdSensor [ exposedField SFBool enabled #TRUE exposedField SFBool isActive #FALSE eventOut SFInt32 keyDown eventOut SFInt32 keyUp ] [ "urn:ParaGraph:KbdSensor" "http://www.parallelgraphics.com/vrml/proto/Cortona/extensions.wrl#KbdSensor" ] DEF key KbdSensor {enabled TRUE isActive TRUE } Group { children [ DEF ts TimeSensor { loop TRUE cycleInterval 3.333 }, # Middle C (C4) DEF C4 Transform { children [ DEF WhiteKey Shape { appearance Appearance { material Material { } } geometry Box { size 0.23 0.1 1.5 } }, Sound { source DEF PitchC4 AudioClip { url "tone1.wav" pitch 1.0 } } ] }, ] } DEF keyscript Script { eventIn SFInt32 keynum eventOut SFTime C4 eventOut SFTime stop url "javascript: function keynum(value,time) { if(value==65601) { C4=time; stop=C4+0.2; } } " } ROUTE key.keyDown TO keyscript.keynum ROUTE keyscript.C4 TO PitchC4.startTime ROUTE keyscript.stop TO PitchC4.stopTime
相关文章推荐
- 单文档多视图——手动生成树形列表,并给叶子节点添加响应事件
- 键盘事件的响应
- 无线端不响应键盘事件(keydown,keypress,keyup)
- iPhone和ipad键盘高度及键盘响应事件 摘
- FLEX actionscript响应鼠标和键盘事件
- c# 如何响应键盘事件 一般用于察看帮助或日志
- Flex中通过扩展List类重载protected keyDownHandler()事件使键盘导航(keyboard navigation)功能无效的例子
- Datagrid键盘事件响应(二)
- JPanel中响应键盘事件
- UITextView: 响应键盘的 return 事件
- as3中解决响应键盘事件时停顿一下的问题,让对象可以八方移动
- Henry手记-Datagrid键盘事件响应(二)
- qt响应键盘事件
- Henry手记 - Datagrid键盘事件响应(一)
- Android如何键盘按键响应事件
- Selenium WebDriver 中鼠标和键盘事件分析及扩展
- UITextView: 响应键盘的 return 事件(收回键盘)
- 如何让div span等元素能响应键盘事件操作指南
- Android键盘响应事件
- C语言Windows程序设计 -> 第十天 -> 响应键盘事件