Einzelnen Beitrag anzeigen

supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#18

Re: Multiplayerspiel Netzwerktechnik ?

  Alt 3. Jul 2006, 10:44
Ich würde dir raten, wenn du dich mit C++ auskennst, den Netzwerk-Sourcecode von Q2 oder Q3 zu studieren (google hilft)

Ansonsten kann ich dir ein wenig über die Grundlagen erzählen, die ich im laufe von Dokumentation-Schnüffeleien in Multiplayer Netcodes entdeckt habe.

1. Es werden nur Veränderungen gesendet - Das hat eine art Grundkomprimierung der Daten, die übertragen werden zur Folge und somit weniger Traffic

2. Es werden meistens gemischte Protokolle gleichzeitig verwendet. TCP für Sicherheitsrelevante Daten und "Ping ist egal" Übertragungen. UDP für alle restlichen Übertragungen (z.b. Spielerpositionen usw)

3. Zu den "komprimierten" Spielerdaten kommen noch die Forcierten "Komplettdatensätze" dazu. Diese beschreiben ein Volltelegramm, das komplett alle Daten überträgt, falls mal viele Pakete verloren gingen. Dieses wird in regelmäßigen Zeitabständen gesendet.

4. Es gibt mehrere "Prioritäten" an Datenpaketen mit mehr oder weniger großen Transferintervallen. Die Spielerbewegungen, Blickrichtungen, Schusswechsel, Flugbahn der Geschosse usw haben z.B. eine hohe Prio und werden mit z.B. der Framerate vom Server gesendet ( bei COD2 z.b. 20FPS ).
Die Weltobjekte wie z.B. Powerups oder Waffen, die rumliegen, werden mit einem langsameren Intervall aktualisiert usw.

5. Es werden verschiedene Techniken verwendet, um dem Lag, der über Internet entsteht (Lan ist zu vernachlässigen), zu kompensieren. Es wird beispielsweise auf Clientseite der Spieleverlauf ein paar ms in die Vergangenheit gesetzt. Und Treffer werden bei Lagkompensierung Clientseitig ausgewertet und im Server nachgeprüft (der dann auch einige Zeitverschiebungen intern verrechnet). Ohne Lagkompensierung trifft man z.b. nur durch Vorhalten, da man ja die Vergangenheit sieht, und in die Zukunft schiessen muss.

6. Die Spielerpositionen und Sichtwinkel (egoshooter) werden interpoliert dargestellt (weshalb man auch ein paar ms in der Vergangenheit zockt). Das heist, ein Paket das ankommt, wird nicht direkt umgesetzt in Grafik, sondern wird zwischengespeichert und erst mit dem nächsten Paket wird es verrechnet (und dazwischen wird der Weg interpoliert und als Grafik dargestellt). Somit gibt es keine "Ruckler".

Ich hoffe geholfen zu haben.
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat