我正在使用这个库很短的时间,我有一个问题就是杀了我。
我有2个立方体,一个有phisy.js,另一个有三个.js,我有一个旋转它们的功能,当你按A,S,D或W键时,取决于相机的旋转,我的代码是这样的:
var v = new THREE.Vector3(0, 0, 0);
if (keys.forward === 1)
v.x = -1;
if (keys.right === 1)
v.z = 1;
if (keys.backward === 1)
v.x = 1;
if (keys.left === 1)
v.z = -1;
//get the searched angle
var angle = camera.rotation.y + Math.atan2(v.x, v.z);
var rot = normalMesh.rotation.y;
var diff = angle - rot;
if (Math.abs(diff) > Math.PI) {
//find the shortest way to rotate
if (diff > 0)
rot += 2 * Math.PI;
else
rot -= 2 * Math.PI;
diff = angle - rot;
}
//get the /2 for a smooth rotation, i really need this
if (diff !== 0)
rot += diff / 2;
normalMesh.rotation.set(0, rot, 0);
在three.js立方体上的工作正常,但在physi.js立方体上我不起作用。
我为此创建了一个演示(我无法在jsfiddle上创建它,因为web worker)
http://demo.cristobaldiaz.cl/test/
我也将源代码保留在zip文件中---> http://demo.cristobaldiaz.cl/test/issue.zip
您可以在http://demo.cristobaldiaz.cl/test/src/app.js第95行检查移动功能
无论如何,如果使用鼠标旋转相机,则可以在将立方体旋转到红色网格的方向时检查是否出现问题。
答案 0 :(得分:1)
您可以从动画循环中删除旋转更新并将其移动到物理循环:
scene.addEventListener('update', function(){
actor.onRender();
})
这种方式始终保持同步。
有关详情,请参阅此页https://github.com/chandlerprall/Physijs/wiki/Callbacks-&-Events。