Nun, Sie haben Antworten bekommen, aber Ihre eigentliche Antwort lautet "versuchen Sie es selbst". Die Dinge unterscheiden sich von Spiel zu Spiel.
Ich habe einige Multiplayer-Spiele für einen Kurs über verteiltes Netzwerk-Game-Design gemacht. Die größte Herausforderung bestand darin, ein Echtzeit-Action-Spiel zu erstellen, an dem viele Spieler beteiligt waren und das verdammt gute Beiträge lieferte. In diesem Punkt wird alles zum Problem. Wie Sie den ersten Link sehen, den Tetrat gesendet hat, wird sogar das Ermitteln einer Absprache zum Problem. Und Sie werden Ausdrücke wie Verzögerung, Interpolation, Extrapolation, Vorhersage lesen und hören ... Aber wenn Sie sich nie bemüht haben, von Grund auf neu zu codieren, werden Sie diese Wörter einfach akzeptieren und würden nicht wissen, was sie wirklich bedeuten.
Meine Empfehlung lautet:
Schritt 1
Beginnen Sie vorerst mit dem vollständig autorisierten serverbasierten Design. Wie Sie sagten, senden Sie einfach Benutzereingaben an den Server und lassen Sie den Server alles tun, und die Clients erhalten die Ergebnisse. Ihr Spiel wird vollständig konsistent funktionieren. Aber wenn Sie sich Ihre Kunden ansehen, werden Sie einige Verzögerungen bemerken, einige Teleportationsprobleme, keine reibungslosen Bewegungen ... ect.
Schritt 2
Beheben Sie die Probleme auf der Clientseite. Die Teleportationsprobleme zum Beispiel. Dein Charakter war bei (0,0) und der Server sagte, dass du jetzt bei (100,100) bist. Dein Charakter wird sich einfach nach (100,100) teleportieren, was nicht schön ist. Da kommt die Interpolation. Sie sollten einen Code auf der Client-Seite haben, der das Zeichen reibungslos von (0,0) auf (100, 100) verschiebt. Ja, Sie werden Ihren Charakter von (0,0) auf (100,100) verschieben, aber wie schnell? Im Moment können Sie nur die Zeitdifferenz zwischen den einzelnen Serverupdates verwenden. Wenn Ihr Server 10 Pakete in einer Sekunde sendet, bedeutet dies, dass zwischen jedem Paket eine Verzögerung von 100 ms liegt.
Schritt 3
Jetzt ist Ihr Spiel bereits für schnelle Netzwerke mit einer Verzögerung von (1-50) ms geeignet. Aber es wird zum Scheitern verurteilt, wenn es einen Paketverlust, eine hohe Latenzzeit oder eine Berechnung gibt, die im Server lange dauert ... ect. In diesen Situationen werden Sie bemerken, wenn Sie den Pfeil nach links drücken, dass sich Ihr Charakter mit einer Verzögerung von 200 ms nach links bewegt. Die Verzögerung zwischen Ihrem Paket geht an Server, Berechnungszeit und kommt mit Ihrer letzten Position zu Ihnen zurück. Das ist schlecht, der schlimmste Nachteil des von Servern autorisierten Designs. Der Spieler möchte, dass sein Charakter nach links bewegt wird, sobald er nach links drückt. Sie können ihn nicht warten lassen. Zum Glück hat der Client auch den gleichen Code wie der Server. Warum sollte er nicht sofort auf dem Client ausgeführt und das Endergebnis mit der Antwort vom Server korrigiert werden? Das ist es, was eine grundlegende Eingabevorhersage ist. Der Kunde drückt nach links, der Code in seiner Seite bewegt ihn nach links. nach einiger Zeit, sagen wir mal 200 ms, kommt die reale Position vom Server und der Client korrigiert damit seine Position. Wenn alles in Ordnung ist, merkt der Kunde nichts, "Schritt 2" hilft uns auch dabei.
Nun, net hat viele Tutorials und Dinge zu diesem Thema. Aber es gibt zwei, die ich wirklich mag:
Wirklich gut, deckt dunkle Flecken ab: Valve-Source Engine Multiplayer Networking
Art von Geschichte, lustig zu lesen und es wert: 1500 Bogenschützen am 28.8 .