由於製作了一些簡單的多人遊戲,我選擇了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