Worum geht es bei der Erstellung eines Echtzeit-Multiplayer-Plattformspiels?

13

Ich erstelle ein Plattformspiel mit einer "kooperativen" Funktion, die ich gerne über Netzwerke / das Internet nutzen würde.

Jetzt habe ich mich mit der Programmierung von Netzwerkspielen vertraut gemacht, einschließlich Artikeln wie Was jeder Programmierer über Netzwerkspiele wissen muss, und daher verstehe ich den Unterschied zwischen Techniken wie Peer-to-Peer-Lockstep und Server-Client-Vorhersagearchitekturen:

  • Ich bin zu dem Schluss gekommen, dass für alle Echtzeitspiele, die über das Internet gespielt werden, Peer-to-Peer-Lockstep einfach keine Option ist.
  • Ich bin auch besorgt, dass selbst für einen Plattformer eine einfache Client-Server-Architektur (ohne irgendeine Art von Client-Vorhersage) aufgrund der Verzögerung zwischen Aktion und Reaktion, die durch einen Roundtrip zu einem Server verursacht wird, zu einem verschlechterten Gameplay führen würde. (Allerdings möchte ich die Notwendigkeit eines zentralen Servers beseitigen, sodass nur einer der Spieler, der Client, diese Verzögerung tatsächlich erlebt.)

Dies lässt die Prognosen der Kunden zu, aber selbst für ein einfaches Spiel wie ein Plattformer klingt dies immer noch ziemlich komplex.

Wie würde ich vorgehen, um ein funktionierendes Client-Vorhersage-System für ein Multiplayer-Plattformspiel zu erstellen?

Justin
quelle
1
Eine Sache, über die Sie sich in einem kooperativen Spiel viel weniger Sorgen machen müssen, ist Betrug;)
Jonathan Connell
Ich habe dies als nicht konstruktiv bezeichnet. Die gestellten Fragen ("Wie viel Arbeit ist es, ein vernetztes Spiel zu schreiben, das den Vorhersagen der Kunden entspricht? Besteht die Hälfte meiner Codebasis aus Netzwerkcode?") Sind viel zu weit gefasst und überhaupt nicht problemspezifisch. Die Antwort wäre im Grunde genommen "es kommt darauf an", was keine gute Antwort ist.
TravisG
-1, "Wie viel Arbeit" ist subjektiv.
Tetrad
1
Wie viel Arbeit, ist nicht subjektiv, da es für sich genommen ist, sondern hängt von ein paar Faktoren ab (Größe des Spiels, Genauigkeitsanforderungen usw.). Diese Faktoren können sich auswirken, wenn es viel Arbeit, ein wenig Arbeit oder irgendwo dazwischen ist (obwohl) welche Art von Arbeit ist eine bessere Frage); Ich denke jedoch, dass das OP wirklich fragt, wie viel Aufwand erforderlich ist und wie groß ein Teil der Codebasis für diese Art von Code wäre. Wie gesagt, kann es zu breit sein. Ich habe eine engere Interpretation gewählt und darauf geantwortet. Ich denke, dass das OP mehr Anstrengungen unternehmen sollte, um die Fragen auf einige sehr spezifische Punkte zu beschränken.
Nate
@Tetrad Entschuldigung - Ich habe mich sehr bemüht, diese Frage so objektiv wie möglich zu gestalten, aber meine Frage lautet: "Ist es schwierig, ein funktionierendes Client-Vorhersage-System für ein Spiel vom Typ Y zu erstellen?" gehe, aber meine Zeit ist begrenzt, so dass das Lernen, das nach X Spieltagen zu viel Arbeit ist, zu spät ist. Ich würde versuchen, mehr Details zu Y zu liefern, aber ich möchte die Frage nicht "zu lokalisiert" machen. Das Hauptproblem hierbei ist die Bewegung, die allen Plattformern gemeinsam ist (ich möchte, dass andere diese Frage nützlich finden). Wenn ich diese Frage verbessern kann, werden Vorschläge geschätzt.
Justin

Antworten:

5

Ich glaube nicht, dass die Hälfte Ihrer Codebasis in Netzwerkcode umgewandelt wird, wenn Sie eine Funktion wie diese implementieren.

Meiner Meinung nach ist der einfachste Weg, dies zu tun, einen "zentralen" Server einzurichten (auch wenn dies bedeutet, dass ein Spieler das Spiel "hostet" und sich dann mit seinem eigenen Server verbindet), der alle Benutzereingaben so schnell wie möglich akzeptiert und sendet es an jeden Client zurück.

Auf dem Client implementieren Sie dies nicht anders als bei einem Koop-Spiel für zwei Spieler vor Ort, außer dass Sie P1 über die Tastatur und P2 über das Netzwerk lesen.

Der Server muss von Zeit zu Zeit einen vollständigen Spielstatus senden, und beide Clients können entweder vom Server aus in den neuen autorisierten Status wechseln oder in den neuen Status wechseln (über einige Sekunden). Sofern Sie nicht einen fürchterlichen Paketverlust oder Tonnen von Clients pro Server haben, sollte dieser Ansatz für die von Ihnen beschriebene Situation ausreichen.

Nate
quelle
Das ist ungefähr so ​​einfach wie ein Client-Server-Ansatz (mit der Ausnahme, dass ein Client den Server hostet -> Sie brauchen keinen dedizierten Server, aber Sie müssen sich mit UDP + NAT-Punchthrough befassen, der sowieso einen dedizierten Server benötigt). Zweitens schlagen Sie die Lockstep-Methode vor (da Sie über das Senden vollständiger Gamestates sprechen). Dies ist meiner Meinung nach nicht die beste Methode, wenn das Spiel über das Internet läuft (wahrscheinlich über LAN), wo Client-Server viel einfacher sind implementieren.
Valmond
1
Nein, ich schlage vor, dass Sie gelegentlich vollständige Spielzustände senden, damit der Client sicherstellen kann, dass die Entfernung nicht zu groß ist.
Nate
2

Ich habe ein voll funktionsfähiges MMORPG - Spiel mit Client - Vorhersage (das Spiel ist noch lange nicht fertig, aber es läuft "OK") und ich habe 40.000 Codezeilen für den Server und das Doppelte für den Client (gleiche Menge für Tools usw. Hinzufügen) .). Die Vorhersage ist wahrscheinlich nicht mehr als ein paar hundert Zeilen (wenn auch das) und das gesamte Netzwerk besteht aus ein paar tausend Zeilen, aber nicht mehr als sagen 5.000 (es hängt ein bisschen davon ab, wo Sie die Linie zeichnen).

Fuzzy Frage Fuzzy Antwort ;-)

Valmond
quelle
2

Ein erheblicher Teil des Netzwerkcodes kann unabhängig von dem Spiel sein, das Sie spielen. Aus diesem Grund und weil Sie noch kein Neuling im Networking sind, empfehle ich Ihnen zunächst, Bibliotheken zu finden, die diese Aufgabe für Sie übernehmen. RakNet zum Beispiel.

Eine Sache, die Sie in Ihrem Spielcode haben möchten, ist die Fähigkeit, mehrere verschiedene Spielzustände zu verarbeiten, die Sie für die Interpolation und Vorhersage verwenden können. Das ist im Vorfeld recht einfach zu entwerfen, kann aber einen erheblichen Arbeitsaufwand bedeuten, wenn Sie ein vorhandenes Einzelspielerspiel modifizieren.

Beachten Sie auch, dass Sie, wenn Sie möchten, dass Fremde ein Peer-to-Peer-Spiel über das Internet spielen, wahrscheinlich mindestens einen Server benötigen, der die Lobby / das Matchmaking übernimmt.

Adam
quelle