2016-03-02 7 views
1

Я создаю игру с 4 игроками, используя node.js и socket.io. В моей игре каждый игрок имеет свои координаты, все хорошо, кроме движения. У меня проблемы с перемещением моих персонажей. Я не знаю, что я делаю неправильно. Буду благодарен за любую помощь.node.js, socket.io movement

стороне сервера:

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 значение. Но на сервере вы читаете как x, так и y, где y не определено, а затем вы отправляете обратно эти значения клиенту, где обновлены ваши существующие x и y. Так как 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 на левый/правый, но сервер посылает как x и y назад, а клиент устанавливает оба значения.

Попробуйте отправить как x, так и y на все движения.

+0

Большое спасибо! –