ich mit node.js und socket.io für Backend, mit jQuery für die Client-Seite gerade beenden das Spiel Pong umzusetzen. Ich habe das Spiel auf meiner kostenlosen AWS-Instanz installiert und die Mechanik funktioniert gut, aber die Latenz ist nicht spielbar. Im Spiel bewegt sich das Paddel des Spielers, der es kontrolliert, lokal. Die Client-Seite sendet auch eine Server-Anfrage, die alle requestFrameAnimation
Paddle-Bewegungen an den Gegner sendet. Um den Ball zu starten, drückt der Spieler, dessen Aufschlag es ist, die Leertaste, die eine Serveranfrage sendet, die dann an beide Spieler ausstrahlt, um die Ballbewegung zu starten.schnellen Pong-Spiel zu machen socket.io Echtzeit
Sowohl die paddle Bewegung und die Kugelabschuss sind aus der Latenz leiden. Für die Paddel denke ich das Problem ist, dass ich eine Serveranfrage alle requestFrameAnimation
sende, die wahrscheinlich zu schnell ist. Vielleicht sollte ich einen setInterval machen, der die Paddelposition des Spielers jeden Bruchteil einer Sekunde an seinen Gegner sendet. Was den Ball betrifft, da das Signal für die Bewegung vom Server gesendet wird, denke ich, dass ich eine tatsächliche Zeit für den Ball senden muss, bevor die Leertaste gedrückt wird, damit jede lokale Maschine bis zu dieser Zeit zählen kann .
hier ein aus irgendeinem Kontext meiner clientseitigen Code snipped:
function updateFrame(){
paddleSpeed = 0;
if (keysPressed.up){ // Move paddle up
if (!(myPaddle.offset().top <= arena.offset().top)){ // Make sure paddle isn't at top
paddleSpeed -= 8;
}
}
if (keysPressed.down) { // Move paddle down
if (!(myPaddle.offset().top+paddleL.height() >= arena.offset().top + arena.height())){ // Make sure paddle isn't at bottom
paddleSpeed += 8;
}
}
if (paddleSpeed != 0) socket.emit("moveReq", paddleSpeed); // Send server request to be sent to opponent
myPaddle.css({top: '+='+paddleSpeed+'px'}); // Move paddle locally
if (gameInProgress){ // If round has started, move the ball
ball.css({left: '+='+ballSpeed.hor+'px', top: '+='+ballSpeed.ver+'px'});
window.requestAnimationFrame(updateFrame); // Request next frame
und meine serverseitige:
socket.on('moveReq', function(data){
socket.broadcast.emit("movePaddle", data); // Send opponent's paddle movement to user
});
socket.on('launchGame', function(){ // Launch the game
io.sockets.emit('startGame');
});
Hat jemand irgendwelche Tipps, die Latenz auf mein Spiel zu reduzieren Oder ist meine kostenlose Tiers nur zu geringe Bandbreite für diese Art von Web-App?
In welcher Region wohnst du? In welcher Region werden Ihre Dienste gehostet? In welcher Region lebt dein Gegner? Dies könnte zu der Latenz beitragen, die Sie gerade erleben. – poida
Westküste NA. Aber selbst wenn ich dieses Spiel auf meinem localhost mit einem anderen Computer über wifi seine Laggy versuchen – MarksCode