由于制作了一些简单的多人游戏,我选择了THREE.js在浏览器端实现图形。在浏览器中一切正常。node.js环境中的THREE.js
转念一想: 服务器必须检查用户最行动。所以我需要在服务器上进行全局复制,与用户进行交互,然后将其状态返回给用户。
那么,作为良好的代码已经针对客户端写 - 我做到了Node.js的兼容,并继续前行。 (良好的碰撞检测,这可以用object.geometry
- 正是我想要的那么糟糕)
结果,碰撞检测代码停止工作。在服务器端Raycaster退出上 串
} else if (object instanceof THREE.Mesh) {
var geometry = object.geometry;
// Checking boundingSphere distance to ray
if (geometry.boundingSphere === null) geometry.computeBoundingSphere();
sphere.copy(geometry.boundingSphere);
sphere.applyMatrix4(object.matrixWorld);
if (raycaster.ray.isIntersectionSphere(sphere) === false) {
return intersects; // _HERE_
}
而且这种情况发生,因为object.matrixWorld
是身份矩阵。 但是进行对象初始化。 mesh.position
和mesh.rotation
在服务器和客户端是相同的(在浏览器中,raycaster作为魅力);
我的思考,说,object.matrixWorld
会在某处renderer.render(self.three_scene, self.camera);
更新。但当然,这不是我想在服务器端做的。
所以现在的问题是:如何使object.matrixWorld
更新在服务器端每个仿真时间?
或者,也许建议,如果有一些其他的方式来获得我想要的东西。
正在为此挣扎两个小时“为什么我的raycaster在本地工作,但不在服务器端?”非常感谢,这使得它现在在服务器端工作:) – Starwave