Sie benötigen nur etwa 30 Updates (oder sogar weniger, vielleicht 10 oder 20) pro Sekunde. interpolieren Sie die Positionen von beweglichen Objekten clientseitig. Im Allgemeinen sollten Sie Daten nur dann senden, wenn sie WIRKLICH benötigt werden. In WoW erhalten Sie möglicherweise mehr Updates von den Spielern, mit denen Sie in einer Gruppe sind, als von den Spielern, die sich am selben Ort befinden. Auch wenn ein anderer Spieler weit von Ihnen entfernt ist, erhalten Sie nicht so viele Aktualisierungen pro Sekunde über ihn.
Senden Sie dann nur einen vollständigen Schnappschuss an jeden Spieler, wenn er eine Verbindung herstellt. Danach senden Sie nur die Änderungen der Spielobjekte. Wenn keine Änderung aufgetreten ist, senden Sie sie nicht.
Dann nutzen Sie BitVectors oder wie auch immer Sie sie nennen, um die Menge nicht benötigter Daten zu reduzieren! Beispiel: Sie können auch versuchen, einen Gleitkommawert mit nur einem Byte zu schreiben (in einem Bereich von 0 bis 1 oder -1 bis 1), sodass Sie nur 256 oder 128 verschiedene Werte haben. Durch die Interpolation bemerkt der Spieler jedoch keine ruckartigen Bewegungen.
Ein Beispiel mit LidgrenLibrary zum Komprimieren von Daten finden Sie hier: http://code.google.com/p/lidgren-network-gen3/wiki/Optimization
Weiter: Versuchen Sie, den Sichtradius der Spieler während ihrer Bewegung zu verringern und nur wichtige Informationen in dieser Zeit zu übertragen. Wenn sie dann anhalten, vergrößern Sie ihren Sichtradius erneut. Sie können ein räumliches Hashing-System oder einen BSP-Baum verwenden, um den Aufwand für die Suche nach Objekten zu verringern, die sich "in Reichweite" befinden. Dies ist eine gute Lektüre für das Thema: http://en.wikipedia.org/wiki/Collision_detection
Komprimieren Sie die Daten auch SELBST. Nur SIE kennen die Datenstruktur und die zeitliche Kohärenz in den Daten (die ausgenutzt werden können und sollten). Ein allgemeiner Algorithmus wie Bzip2 oder Deflate sollte verwendet werden, aber nur als letzte Komprimierungsstufe!
Für nicht spielkritische Informationen können Sie auch zusätzliche P2P-Techniken verwenden. Beispiel: Ein Spieler spielt die "Hallo" -Animation ab. (Nur ein grafischer Effekt) Der Spieler sendet diese Informationen an den Server, der Server leitet sie jedoch nicht an die anderen Spieler weiter. Stattdessen wird dieser unkritische Effekt vom Spieler selbst an die anderen Clients in Reichweite gesendet.
EDIT (wegen des Kommentars):
Zusätzliche Methoden zum Verringern der durchschnittlichen Bitzahl pro Sekunde für jeden Spieler:
Sie haben geschrieben, dass Sie "Objekt wurde nicht geändert" senden. Es gibt keinen Grund, dies zu tun. Wenn Sie wegen Paketverlusts besorgt sind (und Ihre Simulation aus diesem Grund nicht mehr synchron ist), beachten Sie Folgendes: Bei jedem festgelegten Zeitschritt (z. B. 100, 200, 300, 400 ...) wird der Simulationsstatus gehasht und an den Server gesendet . Der Server bestätigt oder sendet einen vollständigen Schnappschuss aller Daten zurück.
Für Dinge wie Raketen oder sogar Spieler können Sie nicht nur interpolieren, sondern auch extrapolieren, um die Simulation realistischer zu gestalten. Beispiel 'Rakete': Anstatt mit Nachrichten wie "Befindet sich jetzt an Position x" zu aktualisieren, senden Sie einfach eine Nachricht mit folgendem Inhalt: "Rakete gestartet: Position (Vektor), Uhrzeit (bei welchem Simulationsschritt die Rakete gestartet wurde), Geschwindigkeit ( Vektor)". Sie müssen also nicht einmal die Drehung einbeziehen, da die Spitze immer in der "Geschwindigkeits" -Richtung ist.
Kombinieren Sie mehrere Befehle in einer Nachricht und senden Sie niemals Nachrichten, die kleiner als 16-20 Byte sind, da der udp-Header größer als die Nachricht selbst ist. Senden Sie auch keine Pakete, die größer als die MTU Ihres Protokolls sind, da die Fragmentierung die Übertragungsgeschwindigkeit verlangsamt.