1

私は 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);

これにより、ノードが無効になるため、アニメーションが効果的に停止しますが、アニメーションを再開すると、サイクルが内部的に停止していないように見えます。効果は、もう一度クリックしてアニメーションを再開すると、オブジェクトがスムーズに回転を再開するのではなく、新しい位置に点滅することです。

それを行う方法はありますか?

4

2 に答える 2

2

「enable」フィールドは、TimeSensor による時間イベントの送信を停止するだけで、センサーを「停止」または「一時停止」しません。必要なのは、現在の時刻 (「time」フィールドまたは他の場所から入手可能) を pauseTime フィールドに送信することです。これにより、TimeSensor が現在の状態でフリーズします。再開するには、現在の時刻を resumeTime に送信します。

TimeSensor の完全な定義については、http: //www.web3d.org/documents/specifications/19775-1/V3.2/Part01/components/time.html#TimeSensor を参照してください。

X3DOM: http://doc.x3dom.org/author/Time/TimeSensor.html

于 2015-06-10T23:42:09.397 に答える