为什么在threejs渲染函数中的while循环不会更新每一帧?

时间:2016-09-21 14:29:45

标签: javascript while-loop three.js

我有一个8个立方体的数组,全部高1px。当按下按钮时,它们意味着使用while循环补间到新的目标高度,如下所示:

if (buttonHit) {
    console.log('button hit')
    for (i in meshArray) {
        while (Math.abs(meshArray[i].scale.y - newList[i].cost)>5) {
            console.log(meshArray[3].scale.y)
            meshArray[i].scale.y += .3
        }
    }
    buttonHit = false;
}

控制台日志显示的是,meshArray [3]连续保持1px 1215次,然后添加.3,然后停止,但是一旦完成,网格就会弹出它的目标高度

while循环在render()中不起作用吗?

1 个答案:

答案 0 :(得分:1)

问题是每个需要渲染的帧都会调用一次渲染。您正在一帧中完成所有更改。 threejs从来没有机会重绘任何东西。

您需要做的是每次调用渲染时仅将.3的高度更改一次。就是没有它循环。

有点像这样的东西:

function render() {

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

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

}