2016-09-21 7 views
0

私は8個のキューブの配列を持っています。すべて1pxの高さです。どのようなコンソールログが私を示してはmeshArrayは、[3]に1ピクセルで1215回を保持していることである3jsレンダリング関数内のwhileループがすべてのフレームを更新しないのはなぜですか?

​​

:ボタンがヒットした場合、彼らはこのように、whileループを使用して、新しいターゲット高さにトゥイーンに意図されています.3を追加して停止しますが、これがすべて完了するとメッシュはターゲットの高さにポップアップします。

whileループはrender()で機能しませんか?

+0

ディスプレイは16.7ミリ秒に一回だけ再描画されます。 'setTimeout(redrawCube、17 * i)'のようなやり方が望ましく、 'requestAnimationFrame()'呼び出しの中で行うのが望ましいかもしれません。 – Redu

答えて

1

レンダリングが必要なのは、レンダリングが必要なフレームごとに1回だけ呼び出されることです。 1つのフレームですべての変更を行っています。 threejsは決して何かを再描画する機会はありません。

あなたがする必要があるのは、レンダリングする1度だけ、高さを.3だけ変更することです。それはループではありません。ビットこのような

何か:

function render() { 

    if (buttonHit) { 
     new_height = 2; 
     buttonHit = false; 
    } 

    if (meshArray[i].scale.y < new_height) { 
     meshArray[i].scale.y +=.3 
    } 

} 
+0

それは完全に働いた!ありがとう!ここでは、私の配列を使用して、ある: '(buttonHit)(I meshArrayで){ currentHeight [I] = newList用{ [i]が }偽buttonHit =を.cost場合。 (I meshArrayで)ため } { IF(meshArray [I] .scale.y EJW

関連する問題