Potrzebujesz tylko około 30 aktualizacji (lub nawet mniej, może 10 lub 20) na sekundę. interpolować pozycje ruchomych obiektów po stronie klienta. Zasadniczo dane należy wysyłać tylko wtedy, gdy NAPRAWDĘ są potrzebne. W WoW możesz otrzymywać więcej aktualizacji od graczy, z którymi jesteś w grupie, niż od graczy, którzy są w tej samej lokalizacji. Ponadto, jeśli inny gracz jest daleko od ciebie, nie otrzymujesz o nim tyle aktualizacji na sekundę.
Następnie wysyłaj tylko jedną kompletną migawkę każdemu graczowi, gdy się połączy. Następnie wysyłaj tylko zmiany obiektów gry. Jeśli nie nastąpiła żadna zmiana, nie wysyłaj jej.
Następnie wykorzystaj BitVectors lub jakkolwiek możesz je wywołać, aby zmniejszyć ilość niepotrzebnych danych! Przykład: Możesz także spróbować napisać liczbę zmiennoprzecinkową, używając tylko jednego bajtu (w zakresie od 0 do 1 lub -1 do 1), więc masz tylko 256 lub 128 różnych wartości. Ale dzięki interpolacjom gracz nie zauważy żadnych gwałtownych ruchów.
Spójrz na to na przykład z LidgrenLibrary na temat kompresji danych: http://code.google.com/p/lidgren-network-gen3/wiki/Optimization
Dalej: Staraj się zmniejszać promień widzenia graczy podczas ruchu i przesyłaj tylko ważne informacje w tym czasie. Następnie, gdy przestaną zwiększać promień widzenia, ponownie. Możesz użyć przestrzennego systemu haszującego lub drzewa bsp, aby zmniejszyć obciążenie związane z wyszukiwaniem obiektów znajdujących się „w zasięgu”. To dobra lektura dla tematu: http://en.wikipedia.org/wiki/Collision_detection
Również kompresuj dane TYLKO SIEBIE wiesz o strukturze danych i czasowej spójności danych (które można i należy wykorzystać). Należy stosować ogólny algorytm, taki jak Bzip2, Deflate, cokolwiek, ale tylko jako ostatni etap kompresji!
Ponadto w przypadku informacji nieistotnych dla gry możesz również zastosować dodatkowe techniki P2P. Przykład: Gracz odtwarza animację „cześć” (tylko efekt graficzny). Gracz wysyła te informacje do serwera, ale serwer nie przekazuje informacji innym graczom. Zamiast tego ten niekrytyczny efekt jest wysyłany przez samego gracza do innych klientów w zasięgu.
EDYCJA (z powodu komentarza):
Dodatkowe metody zmniejszania średniej liczby bitów na sekundę dla każdego gracza:
Napisałeś, że wysyłasz „Obiekt się nie zmienił”. Nie ma powodu, aby to robić. Jeśli martwisz się utratą pakietów (i z tego powodu zsynchronizujesz symulację), weź pod uwagę następujące kwestie: Przy każdym ustalonym czasie (np. 100, 200, 300, 400 ...) hasz stan symulacji i wyślij go na serwer . serwer potwierdza lub wysyła pełną migawkę wszystkich danych z powrotem.
W przypadku rakiet, a nawet graczy możesz zastosować nie tylko interpolację, ale także ekstrapolację, aby uczynić symulację bardziej realistyczną. Przykład „Rakieta”: Zamiast aktualizować za pomocą wiadomości typu „Jest teraz w pozycji x”, po prostu wyślij wiadomość zawierającą następujące informacje: „Rakieta pojawiła się: pozycja (wektor), Czas (w którym etapie symulacji spawnowała się rakieta), prędkość ( wektor)". Nie musisz nawet uwzględniać obrotu, ponieważ końcówka zawsze będzie w kierunku „prędkości”.
Połącz wiele poleceń w jedną wiadomość i nigdy nie wysyłaj wiadomości mniejszych niż 16-20 bajtów, ponieważ nagłówek udp będzie większy niż sama wiadomość. Nie wysyłaj również pakietów większych niż MTU twojego protokołu, ponieważ fragmentacja spowolni prędkość transmisji.