所以我在three.js中构建了一个简单的场景,玩起来很酷,但我想添加一些从socket.io服务器运行的多人游戏功能,所以我添加了玩家这样three.js socket.io多人游戏系统
var username = prompt("whats yo name")
,然后当我这样做的所有型号,装载
socket.emit('addPlayer', username)
所以后来我的服务器端发生这种情况
socket.on('addPlayer', function(username) {
players.push(username)
console.log(username + " joined")
console.log("online Users " + players)
socket.broadcast.emit('syncPlayers', players)
socket.emit('syncPlayers', players)
})
所有的作品exatly我如何计划
所以当syncPlayers
被称为所有客户端上
socket.on('syncPlayers', function(players) {
players.forEach(function(value) {
if (value == username) {
console.log("not adding " + value + " thats you ")
} else {
console.log("player Online " + value);
newplayer = value;
addPlayer(newplayer)
}
});
})
,然后当然addPlayer被称为传递VAR新玩家
function addPlayer() {
console.log("adding " + newplayer)
charObjectName = newplayer + "Char"
console.log("added" + charObjectName)
charObjectName = new THREE.Mesh(
new THREE.BoxGeometry(3, 3, 3),
new THREE.MeshPhongMaterial({
color: 0xffffff,
map: crateTexture,
bumpMap: crateBumpMap,
normalMap: crateNormalMap
})
);
scene.add(charObjectName)
charObjectName.position.set(10, 10, 10)
}
权现在我让每个新玩家成为一个立方体,因为它会一直说undefined或什么的,当我尝试加载一个加载的模型,但那是另一次
但我认为我的问题可能可能在于该行
charObjectName = newplayer + "Char"
喜欢也许没有被正确设置,所以我的控制台登录它,它是i的值预期
但是当我尝试更新的玩家立方体的位置,这样
if (keyboard[87]) { // W key
camera.position.x -= Math.sin(camera.rotation.y) * player.speed;
camera.position.z -= -Math.cos(camera.rotation.y) * player.speed;
socket.emit('updateXZPos', username, camera.position.x, camera.position.z)
}
if (keyboard[83]) { // S key
camera.position.x += Math.sin(camera.rotation.y) * player.speed;
camera.position.z += -Math.cos(camera.rotation.y) * player.speed;
socket.emit('updateXZPos', username, camera.position.x, camera.position.z)
}
if (keyboard[65]) { // A key
camera.position.x += Math.sin(camera.rotation.y + Math.PI/2) * player.speed;
camera.position.z += -Math.cos(camera.rotation.y + Math.PI/2) * player.speed;
socket.emit('updateXZPos', username, camera.position.x, camera.position.z)
}
if (keyboard[68]) { // D key
camera.position.x += Math.sin(camera.rotation.y - Math.PI/2) * player.speed;
camera.position.z += -Math.cos(camera.rotation.y - Math.PI/2) * player.speed;
socket.emit('updateXZPos', username, camera.position.x, camera.position.z)
}
有位置,这是它在服务器端
socket.on('updateXZPos', function(username, pos1, pos2) {
console.log(username + ' x-' + pos1 + '- y-' + pos2)
socket.broadcast.emit('updateZPos', username, pos1, pos2)
})
和我得到的控制台登录的事情完全
然后当我打电话updateZPos功能
socket.on('updateZPos', function(username, pos1, pos2) {
console.log(pos1 + pos2)
toMove = username + "Char"
console.log(toMove)
toMove.position.x = pos2, toMove.position.z = pos2
})
的不确定显然我不能设置x属性,因此VAR toMove
心不是可能纠正在客户端上?
对不起,如果这是一些简单的一个旷日持久的问题,但其真正困扰我
'函数addPlayer()'应该接受一个PARAM,不是吗? - '功能addPlayer(玩家)'。我知道你获得了你期望的价值,但对我而言这似乎很奇怪。当你'console.log(toMove)' - 你获得了你期望的价值? –
是的,先生我正在添加尼克查尔在我的情况下 –