YellowRabbit Posted March 15, 2017 Share Posted March 15, 2017 Hello, I am creating a simple, multiplayer, platform game in Phaser. I'm looking the best solution for lag. At the begining I sent to clients current positions of players. It was't be good solution. Next, I sent to clients velocities. In this solution I saw misalignment effect. One player saw own character at another postion than second player. Now I use queque of movement. This solution is good, but I think code can be better. Maybe someone has any ideas? function distance(x1, y1, x2, y2) { var dx = x1 - x2; var dy = y1 - y2; return Math.sqrt(dx * dx + dy * dy); } function update() { if (player.body.velocity.x != 0 && !(leftButton.isDown) && !(rightButton.isDown)) { player.body.velocity.x = 0; client.ws.send("VELX0|" + parseInt(player.body.x) + "|" + parseInt(player.body.y)); } if (player.body.velocity.x == 0 && !(leftButton.isDown) && (player.body.touching.down) && !(rightButton.isDown)) { player.body.velocity.x = 0; client.ws.send("VELX0|" + parseInt(player.body.x) + "|" + parseInt(player.body.y)); } if (leftButton.isDown && player.body.velocity.x != -300) { player.body.velocity.x = -300; client.ws.send("VELX-300|" + parseInt(player.body.x) + "|" + parseInt(player.body.y)); } if (rightButton.isDown && player.body.velocity.x != 300) { player.body.velocity.x = 300; client.ws.send("VELX300|" + parseInt(player.body.x) + "|" + parseInt(player.body.y)); } if (upButton.isDown && player.body.velocity.y==0 && player.body.touching.down) { player.body.velocity.y = -500; client.ws.send("VELY-500|" + parseInt(player.body.x) + "|" + parseInt(player.body.y)); } if (Object.keys(playersList).length > 1) { if (moves.length > 0) { i = moves.shift(); if (distance(player2.x, player2.y, parseInt(i["x"]), parseInt(i["y"])) <= 10 || moves.length >= 1) { if (i.move === "VELX") { player2.body.x = i["x"]; player2.body.y = i["y"]; player2.body.velocity.x = i["value"]; } if (i.move === "VELY") { player2.body.x = i["x"]; player2.body.y = i["y"]; player2.body.velocity.y = i["value"]; } } else moves.unshift(i); } } } } game = new Phaser.Game(900, 580, Phaser.AUTO, 'phaser', { preload: preload , create: create , update: update }); function Client() {} Client.prototype.openConnection = function () { this.ws = new WebSocket("ws://127.0.0.1/ws/"); this.connected = false; this.ws.onmessage = this.onMessage.bind(this); this.ws.onerror = this.displayError.bind(this); this.ws.onopen = this.connectionOpen.bind(this); }; Client.prototype.connectionOpen = function () { this.connected = true; }; Client.prototype.onMessage = function (message) { if (message.data.substring(0, 4) == "VELX") { z = { x: parseInt(message.data.substring(6).split("|")[2]) , y: parseInt(message.data.substring(6).split("|")[3]) , move: "VELX" , value: parseInt(message.data.substring(6).split("|")[1]) } moves.push(z); } if (message.data.substring(0, 4) == "VELY") { z = { x: parseInt(message.data.substring(6).split("|")[2]) , y: parseInt(message.data.substring(6).split("|")[3]) , move: "VELY" , value: parseInt(message.data.substring(6).split("|")[1]) } moves.push(z); } }; Client.prototype.displayError = function (err) { console.log('Websocketerror: ' + err); }; Link to comment Share on other sites More sharing options...
Odk Posted March 15, 2017 Share Posted March 15, 2017 Hi, This helped me to grasp fast multiplayer games: http://www.gabrielgambetta.com/fast_paced_multiplayer.html Nice read IMHO. Link to comment Share on other sites More sharing options...
Recommended Posts