node.js,socket.io移动

时间:2016-03-02 18:15:03

标签: javascript node.js socket.io

我正在使用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"];
        });

感谢您的关注。

2 个答案:

答案 0 :(得分: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"];
 });

免责声明:可能存在拼写错误。

答案 1 :(得分:0)

问题:

  • 您粘贴的javascript无法编译,因为在结束}时会加倍function movement
  • 您要从socketPlayer1.playerImage.x发送数据并回读socketPlayer1.x
  • 客户端只是向左/右发送x,但服务器同时发送xy,客户端设置这两个值。

尝试在所有动作中同时发送xy