我正在使用node.js和socket.io创建一个4人游戏。在我的游戏中,每个玩家的坐标除了移动之外一切都很好。我在移动角色方面遇到了麻烦。我不知道我做错了什么。我将不胜感激任何帮助。
服务器端:
socket.on('move', function(data)
{
var w = data["dir"];
var x = data["x"];
var y = data["y"];
if(w == "down")
y += 5;
if(w == "up")
y -= 5;
if(w == "left")
x -= 5;
if(w == "right")
x += 5;
console.log(y);
io.sockets.emit("_movement",{ "X" : x, "Y" : y});
});
客户端:
window.addEventListener("keydown", movement);
function movement(evt)
{
switch(evt.keyCode)
{
case 40:
socket.emit("move", {"y" : socketPlayer1.playerImage.y, "dir" : "down"});
break;
case 38:
socket.emit("move", {"y" : socketPlayer1.playerImage.y, "dir" : "up"});
break;
case 37:
socket.emit("move", {"x" : socketPlayer1.playerImage.x, "dir": "left" });
break;
case 39:
socket.emit("move", {"x" : socketPlayer1.playerImage.x, "dir": "right" });
break;
}
}
}
socket.on("_movement", function(data)
{
socketPlayer1.x = data["X"];
socketPlayer1.y = data["Y"];
});
感谢您的关注。
答案 0 :(得分:1)
您的代码中存在错误
每当按左/右键时,您发送x
值。但是在服务器上,您同时阅读了x
和y
,其中y
未定义,然后您将这些值发送回客户端,现有的x和y已更新。由于y未定义,因此没有移动。
同样的上/下键按下。
<强>解决方案强>:
改进的客户端:发送x和y坐标。
window.addEventListener("keydown", movement);
function movement(evt)
{
var dir ="nowhere";
switch(evt.keyCode)
{
case 40:
dir = "down";
break;
case 38:
dir = "up";
break;
case 37:
dir = "left";
break;
case 39:
dir = "right";
break;
}
socket.emit("move", {"x" : socketPlayer1.playerImage.x, "y" : socketPlayer1.playerImage.y, "dir": dir });
}
socket.on("_movement", function(data)
{
socketPlayer1.x = data["X"];
socketPlayer1.y = data["Y"];
});
免责声明:可能存在拼写错误。
答案 1 :(得分:0)
问题:
}
时会加倍function movement
。socketPlayer1.playerImage.x
发送数据并回读socketPlayer1.x
x
,但服务器同时发送x
和y
,客户端设置这两个值。尝试在所有动作中同时发送x
和y
。