站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题X3D实战基础讲座之十一

X3D实战基础讲座之十一

摘要: X3D的交互实现也是通过类似消息映射的映射机制。用户事件的产生是通过相应的传感器产生
<table cellSpacing=0 cellPadding=5 width=570 bgColor=#fbe392 border=0> <tr> <td> <table cellSpacing=0 cellPadding=5 width=570 border=0> <tr> <td align=middle width=200 bgColor=#e1b004>天极IT资讯短信服务 电脑小技巧
<table cellSpacing=0 cellPadding=3 width="100%" bgColor=#fffcc0 border=0> function check4() { if (dn.mobile.value.length!=11) { alert("手机号码不正确!"); dn.mobile.focus(); return false; } return true; } <form name=dn onsubmit="return check4()" action=http://www.my5757.com/tj/join.jsp target=_blank> <tr vAlign=center> <td>资费:包月5元
手机: <input style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid; HEIGHT: 16px" size=11 name=mobile> <input type=image height=18 width=45 src="http://www.my5757.com/yesky/images/d34.gif" align=middle border=0 name=image2> </td></tr><input type=hidden value=yjq name=stype> </form></table></td> <td width=370 bgColor=#fbc403>介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。 </td></tr></table></td></tr></table>
  我们知道,对于Visual C++而言,交互的实现是通过消息映射来进行的。同样,X3D的交互实现也是通过类似的映射机制。用户事件的产生是通过相应的传感器产生的,而ROUTE语句就是相当于事件的映射,它映射到另一个输入事件中。<iframe align=right marginWidth=0 marginHeight=0 src="http://images.chinabyte.com/adjs/iframe-pip/y-software-pip.html" frameBorder=0 width=360 scrolling=no height=300></iframe>

  X3D中,用户事件的传感器有:KeySensor(键盘传感器) 、StringSensor(字符串传感器)、 TouchSensor(触摸传感器)、PlaneSensor(平移传感器) 、SphereSensor(绕点旋转感器)和CylinderSensor(Y轴旋转传感器)等。由于BS浏览插件对X3D新增的KeySensor和StringSensor节点的支持不够好,故这里暂不讨论。

  一、 TouchSensor(触摸传感器)节点

  TouchSensor(触摸传感器)节点产生基于定点输入设备(通常是鼠标)的事件。这些事件表明用户是否正在点选某个几何体和用户在什么地方,以及在什么时候按了定点设备的键。它的主要域或事件有:

  description -- 这个节点功能的文字提示。

  enabled -- 设置传感器节点是否有效。默认值为True。

  isActive -- 当点击或移动鼠标(指点设备时)发送事件。按下鼠标主键时isActive=True, 放开时
isActive=False。

  isOver -- 当指点设备移动过传感器表面时发送事件。

  hitPoint_changed -- 事件输出在子节点局部坐标系统点击点的定位。

  hitNormal_changed -- 事件输出了点击点的表面的法线向量。

  hitTexCoord_changed -- 事件输出了点击点的表面的纹理坐标。

  touchTime -- 当传感器被指点设备点击时产生时间事件。

  需要说明的是:

  (1) 若定点设备未指向传感器的兄弟几何体,而用户开始将定点设备移到传感器的兄弟几何体时,传感器将产生一个isOver事件,并将其值设置为True;相反,若定点设备已经指向传感器的兄弟几何体,此时用户将定点设备移出传感器的兄弟几何体,传感器将产生一个isOver事件,并将其值设置为False。

  (2) 当用户将定点设备从几何体的一点移动到另一点时,传感器将发送一系列事件: hitPoint_changed、hitNormal_changed、hitTexCoord_changed,分别表明用户所指的位置、该点的法向量和纹理坐标。

  (3) 当用户点击被TouchSensor监视的对象时,传感器将产生值为True的isActive事件;而当用户释放定点设备的键时,传感器将产生isActive为False的事件。

  (4) 若用户在指向几何体时按下鼠标键,然后在仍然指向这个几何体(或又回到这个几何体)时释放鼠标键,传感器将要发送一个touchTime事件,表明键被释放的时间。可以使用这一事件来模拟许多常用的用户接口(如只有在用户点击和释放定点设备按键时才产生的动作)。

  下面举两个例子来说明:

  示例1:当鼠标处在立方体的时候,就会有一个小球跟随鼠标移动。

  示例代码如下:



  示例的结果如下图所示:



  说明:需要将触摸传感器节点和要触摸的形体节点放在同一个父节点处。

  示例2:当单击中间小球时,将打开点光源,照亮周围的两个球。

  示例代码如下:



  示例的结果如下图所示:



zmbbs=1;



↑返回目录
前一篇: 用JBuilder9 开发Struts实例
后一篇: 突破Java异常处理规则