Worum geht es bei einem einfachen UDP-Spiel?

17

Ich habe einmal versucht, ein einfaches Spiel mit UDP in einer Woche als Wegwerftest zu schreiben. Es ist schrecklich gelaufen.

Ich habe es früh weggeworfen. Das Hauptproblem, das ich hatte, war, den Spielzustand aller Spieler / Feinde / Objekte in einen alten Zustand zu versetzen und das Spiel bis zu dem Zeitpunkt vorzuspulen, an dem der Spieler spielt (dh eine halbe Sekunde vor einem Sprung. Ein wenig früh oder spät kann den Spieler den Sprung verpassen lassen)

Vielleicht ist diese Methode nicht der einfachste Weg? Ich vermute es, aber ich habe es von Anfang an falsch entworfen und am Ende des 2. Tages realisiert. (also habe ich nicht zu viel gelernt oder so viel Zeit verschwendet)

Was gehört für mich und andere zu einem einfachen UDP-Spiel und wie schreibe ich eines? Oder wie löse ich das Vorhersageproblem, das wieder herstellt, um richtig festzusetzen.

Ich werde dies als CW markieren, da ich weiß, dass es viele hilfreiche Antworten geben wird.

user1047
quelle

Antworten:

9

Glenn Fiedler hat hierzu eine exzellente Reihe von Artikeln verfasst , die so ziemlich alle grundlegenden Konzepte abdecken.

falstro
quelle
Der Fließkomma-Determinismus-Artikel hat mich umgehauen. Sein zu schlechter Synchronisierungszustand wird nicht getan, weil das der ist, den ich lesen wollte. Obwohl der Gleitkomma-Determinismus viele Fragen beantwortet.
Keiner dieser Artikel befasst sich eingehend mit der Synchronisation von
Zuständen,
3

Eigenes Rolling kann lehrreich sein, aber Sie erhalten oft mehr Erfolg, wenn Sie eine vorhandene Implementierung nutzen können (oder zumindest von dort aus starten).

Ich habe sowohl ENet als auch Raknet verwendet . Ich habe Enet nur in einem einfachen Spiel verwendet, aber es hat getan, was ich brauchte. Enet verwendet eine niedrigere API-Ebene als Raknet. Raknet wurde in einem größeren Projekt eingesetzt. Raknet ist extrem leistungsfähig, möchte Sie jedoch dazu bringen, Ihr Spiel nach Raknets Framework zu strukturieren.

Enet:

  • Verbindungsmanagement
  • Sequenzierung
  • Kanäle
  • Verlässlichkeit
  • Fragmentierung und Wiederzusammenbau
  • Anhäufung
  • Anpassungsfähigkeit
  • Portabilität
  • Freiheit

Raknet:

  • Objektreplikation
  • Autopatcher
  • Sichere Verbindungen
  • Robuste Kommunikationsschicht (im Grunde alle Enets-Funktionen in einem Artikel zusammengefasst)
  • Remote-Prozeduraufrufe
  • Sprachkommunikation
  • NAT-Durchschlag
deft_code
quelle
+1 für ENet, ich benutze es seit einer Weile für Kunden und sie mögen es.
Len Holgate
Er fragt nach staatlicher Synchronisation - diese Antwort hat nichts damit zu tun
BlueRaja - Danny Pflughoeft
-1, gleicher Grund wie BlueRaja
Jonathan Dickinson
2

Wenn Sie Zeit und Energie haben, können Sie die Quake 3-Quelle herunterladen und studieren. Es ist ziemlich leicht zu verstehen, ob Sie mit C vertraut sind, und ebenso leicht, daran zu basteln.

Welche anderen Multiplayer-Spiele haben Quellcode und verwenden UDP?

BRaffle
quelle
1
Es gibt einen Artikel, der auch den Code beschreibt. trac.bookofhook.com/bookofhook/trac.cgi/wiki/Quake3Networking
Zooropa
0

Wenn Sie (wie ich) nach Hause gehen, werden Sie viel lernen - auch über Dinge, die Sie nicht wissen wollten. Wie NAT Traversal. Laut caspin hat Enet das verpasst, aber man konnte immer Open-Source-STUN-Code finden, der in den meisten Situationen funktioniert.

Jonas Byström
quelle