ThreeJS,Websockets和NodeJS客户端/服务器实验

我正在用socket.io,ThreeJS,Javascript和NodeJS来创build一个简单的使用ThreeJSgraphics的客户端/服务器。 我不确定所有这些框架是否能够一起工作,但是我决定给它一个镜头,因为我之前在网上看到过类似的例子,尽pipe我找不到一个简单的解剖或试验的例子。 这主要是为了尝试,但我也想做一个小小的概念游戏来certificate我迄今为止学到的东西。

我在这里发布我的代码: https : //gist.github.com/netsider/63c414d83bd806b4e7eb

对不起,如果有点不整洁,但我尽我所能使它尽可能可读。

基本上,现在服务器端NodeJS脚本似乎运行良好(运行“node server-alpha.js”),客户端脚本(客户端alpha.html,您可以在浏览器中打开)连接到服务器,并显示用户列表(也连接)。 然而,我的意图是让每个用户能够移动他/她自己的立方体,现在每个立方体只能被添加到屏幕上(而不是被添加,减去,然后再添加 – 以给出运动的幻觉)。 如果您运行这两个代码段并连接一个或两个用户,并为每个用户移动箭头键几次,您将看到我在说什么。

有人可以帮我吗? 我尝试了几种不同的方法来删除多维数据集(并记住要在每个之后调用render())…但是我尝试的所有东西似乎都不起作用。 它总是导致立方体被添加到屏幕上,并且不会被减去。

我在代码中添加了一些注释,让事情变得简单一些,因为我知道这是相当多的代码(如果它不是你自己的)。

谢谢,任何帮助将不胜感激…因为我真的坚持试图使立方体移动。

此外,我无法添加Fly-Controls(FlyControls.js – 它被注释掉ATM),所以如果有人能告诉我我错了什么地方,我也会很感激。

好,所以你不想再重新制作立方体,你只需要改变位置。

另外在游戏开发中,使用面向对象的devise几乎是一个要求,一个好的方法去做这个将是一个球员对象,所以..

CPlayerList = new Array(); // an array of player objects function ClientPlayer() { this.Cube; this.Name = "unnamed"; this.Id = 0; this.Create = function(name,pos,id) { this.Name = name; this.Id = id; var cubeGeometry = new THREE.BoxGeometry(10, 10, 10); var cubeMaterial = new THREE.MeshLambertMaterial({color: 'red', transparent:false, opacity:1.0}); this.Cube = new THREE.Mesh(cubeGeometry, cubeMaterial); this.Cube.position.x = pos.x; this.Cube.position.y = pos.y; this.Cube.position.z = 20; // don't know why this is 20, remember y axis is up & down in opengl/threejs scene.add(this.Cube); } this.Move = function(vector) { this.Cube.position.set(this.Cube.position.x + vector.x, this.Cube.position.y + vector.y, 20); } }