2016-03-02 112 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

非常感謝! –