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?
networking
multiplayer
platformer
Justin
quelle
quelle
Antworten:
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.
quelle
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 ;-)
quelle
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.
quelle