无法在three.js中获得FirstPersonControls

Ser*_*pov 7 javascript html5 webgl three.js

我正在尝试这个:

controls = new THREE.FirstPersonControls(camera);

controls.movementSpeed = 1000; controls.lookSpeed = 0.125; controls.lookVertical = true;

它没有用,从这里我发现我需要用时间增量更新控件:

var clock = new THREE.Clock();

controls.update(clock.getDelta());

但是我得到了undefined is not a function错误THREE.Clock()

你能指点我使用FirstPersonControls进行演示/教程,或者只是告诉我什么是错的?

谢谢!!

Geo*_*nza 8

您是否尝试过简单地调用controls.update();(通过三角形)?

我刚试过通过复制misc_sound.html示例中的一些代码来尝试使用该类.所以在init()中:

controls = new THREE.FirstPersonControls( camera );

                controls.movementSpeed = 70;
                controls.lookSpeed = 0.05;
                controls.noFly = true;
                controls.lookVertical = false;
Run Code Online (Sandbox Code Playgroud)

并在render()中:

controls.update();
Run Code Online (Sandbox Code Playgroud)

更新

正如托德所指出的,在较新的版本中,需要提供增量时间参数:

controls.update(delta);
Run Code Online (Sandbox Code Playgroud)

  • 请看[ToddMorrison的回答](http://stackoverflow.com/a/11286753/1888983),如果像我一样,你先盲目地开始复制/粘贴:P调用需要`controls.update(delta);` (2认同)

dee*_*ent 5

请注意,在R49中,此api现在需要更新调用上的"delta".delta必须是自上次更新以来的毫秒位移,应该通过requestAnimationFrame回调传递.

http://paulirish.com/2011/requestanimationframe-for-smart-animating/