2016-03-02 110 views
1

我创造如何使用Node.js和socket.io 4人游戏。在我的游戏中,每个玩家都有它的坐标,除了移动以外,一切都很好我在移动角色时遇到了麻烦。我不知道我做错了什么。我会很感激任何帮助。的node.js,socket.io运动

服务器端:

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

什么问题? – bolav

+0

字符不动。正如我之前提到的 –

+0

你可以在服务器端打印x和y的值吗? –

回答

1

有错误在你的代码

每当有左/右按键,你送x值。但在服务器上的,你看这两个xy,其中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"]; 
}); 

免责声明:可能有错别字。

0

问题:

  • 您粘贴的JavaScript的结束function movement时不会编译,因为双}
  • 您从socketPlayer1.playerImage.x发送数据和读回socketPlayer1.x
  • 客户端只是左/右发送x,但是服务器同时发送xy回来,客户端设置两个值。

尝试同时发送xy的所有动作。

+0

非常感谢! –