我如何使用controls.update();与PointerLockControls.js

时间:2018-09-04 06:46:49

标签: javascript three.js controls typeerror

当我使用下面的代码片段时,被告知要使用controls.update();命令,但出现错误

未捕获的TypeError:controls.update不是动画函数

我查看了PointerLockControls.js和OrbitControls.js,发现Orbit具有update()函数,而Pointer没有,最后我检查了控件每帧更新的重要性,如何解决这个问题?

var dt = 1/60;
function animate() {
  requestAnimationFrame(animate);
  if(controls.enabled) {
    world.step(dt);

    //update ball positions
    for(var i=0; i<balls.length; i++) {
      ballMeshes[i].position.copy(balls[i].position);
      ballMeshes[i].quaternion.copy(balls[i].quaternion);
    }

    //update box positions
    for(var i=0; i<boxes.length; i++) {
      boxMeshes[i].position.copy(boxes[i].position);
      boxMeshes[i].quaternion.copy(boxes[i].position);
    }
  }

  controls.update(Date.now()-time);
  renderer.render(scene, camera);
  time = Date.now();
}

2 个答案:

答案 0 :(得分:0)

  

有人告诉我要使用controls.update()命令

有趣,谁告诉过你^^? PointerLockControls没有更新方法,因为它仅执行简单的事件处理。尽管OrbitControls具有更新方法,但只有在启用阻尼或自动旋转后,才需要调用它。为什么?因为当这些选项之一处于活动状态时,即使没有触发mousemovetouchmove之类的事件,它也需要更新相机。

答案 1 :(得分:0)

您不能同时使用orbitcontrols和pointerlockcontrols吗?那么由于指针锁没有更新,它将需要从轨道进行更新。