我在 x3d 中实现了一个可爱的太阳系,几个小时以来我一直在尝试做的事情是用鼠标单击一下就停止行星的旋转,这“有效”:
<TimeSensor DEF='clockSol' id='clockSol' cycleInterval='80' loop='true' enabled='true' />
...
<OrientationInterpolator DEF='interRotacion' key='0 0.25 0.5 0.75 1' keyValue='0 1 0 0 0 1 0 1.57079 0 1 0 3.14159 0 1 0 4.71239 0 1 0 6.28317'/>
...
<ROUTE fromNode='clockSol' fromField='fraction_changed' toNode='interRotacion' toField='set_fraction'></ROUTE>
<ROUTE fromNode='interRotacion' fromField='value_changed' toNode='RotacionSol' toField='set_rotation'></ROUTE>
*............*
这就是太阳动画的实现。
点击事件如下:
document.getElementById('Sol').addEventListener('click',
function() {
if(document.getElementById('clockSol').getAttribute('enabled') == 'true' )
document.getElementById('clockSol').setAttribute('enabled', 'false');
else
document.getElementById('clockSol').setAttribute('enabled', 'true');
}, false);
这有效地停止了动画,因为它禁用了节点,但是当我恢复动画时,内部循环似乎没有停止。效果是,当我再次单击并恢复动画时,对象会闪烁到一个新位置,而不是像应有的那样平滑地恢复旋转。
任何想法如何做到这一点?