2016-03-23 18 views
1

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?

+0

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

+0

Westküste NA. Aber selbst wenn ich dieses Spiel auf meinem localhost mit einem anderen Computer über wifi seine Laggy versuchen – MarksCode

Antwort

1

Es sollte genügend Bandbreite, um dieses Spiel einfach zu laufen, so dass ich glaube nicht, dass Ihr Problem ist.

Stattdessen empfehle ich einen Blick auf this Blog über Online-Spiel Entwicklung zu nehmen. Ich habe die dort beschriebenen Ideen selbst benutzt, als ich angefangen habe, Multiplayer-Spiele zu entwickeln. Es erklärt einige Schlüsselprobleme und Lösungen bei der Entwicklung von Online-Spielen.

+0

Yea ich denke, es ist etwas in meiner Umsetzung Becasuse, wenn ich es durch meine localhost laufen und mit einem anderen Computer über WLAN verbinden, ist es noch lückig. – MarksCode

+0

Wie in dem Blog/Artikel erwähnt, den ich früher verlinkt habe, möchten Sie wahrscheinlich eine Art von clientseitiger Vorhersage hinzufügen, um nicht so abhängig von der Serverlatenz zu sein. –

+0

Hmm, das klingt ziemlich kompliziert, aber ich werde es versuchen! – MarksCode