Wątek przeniesiony 2022-03-13 21:45 z Python przez cerrato.

Na jakiej zasadzie działają gry online

0

Witam, ostatnio postanowiłem po prawie 7 miesiącach robienia gier offline zrobić coś online ale nie wiem jak do tego się zabrać mógł by mi ktoś wytłumaczyć na jakiej zasadzie działają gry typu np cs go, valorant itd z góry dzięki :D

6

Masz serwer, na którym jest uruchomiony backend gry, gracze się z nim łączą i na nim wykonujesz wszystkie ważne operacje jak np. obliczenie pozycji gracza itd. Potem synchronizujesz to z resztą graczy i tyle.

3

Zależy jakie gry online (nie wszystkie muszą jednakowo działać).

Niedawno na Hacker News był artykuł i dyskusja o tym, jak działają gry online oparte o tury:
https://news.ycombinator.com/item?id=30352710
https://longwelwind.net/blog/networking-turn-based-game/

albo tutaj np. artykuł (z 2004) o tym, jak zsynchronizować fizykę gry po sieci:
https://gafferongames.com/post/networked_physics_2004/

1

Jeszcze napisz w czym robisz, bo jak w gotowym silniku, to w Unity połowa jak nie więcej stoi na PUN (photon) a druga na Unity Networking (chociaż tutaj coś się ostatnio zmieniało).

4

uruchomiony backend gry, gracze się z nim łączą i na nim wykonujesz wszystkie ważne operacje jak np. obliczenie pozycji gracza

No z tą pozycją to tak nie do końca, bo w takim założeniu robiąc dynamiczniejszą grę skończysz z zauważalnym input lagiem jeśli serwer nie leży gdzieś blisko po kablu. Już gdzieś w latach dziewięćdziesiątych zaczęto implementować client-side prediction żeby zniwelować latency.

Trochę ciekawostek na temat sieciowych rpgów w kontekście programowania sieciowego przekazał Pat Wyatt (diablo, warcraft, starcraft, guild wars) na handmadecon w 2015.

0

Ja mam inne pytanie. W CS mamy parametr tickrate, który może być ustawiony na 64 lub 128, jego definicja brzmi:

Za tym anglojęzycznym wyrażeniem kryje się częstotliwość przesyłanych pakietów internetowych od użytkownika do serwera. Liczba ta oznacza, że dane między użytkownikiem a serwerem przesyłane są 64 lub 128 razy na sekundę.

I teraz jeżeli ping gracza wynosi 30ms to niemożliwym jest wykonanie 64 wymian między klientem a serwerem w ciągu sekundy, bo 30ms * 64 = 1920ms, a 1920ms > 1 sekunda. Nie mówiąc już o 128. Ktoś wie dokładnie jak ta komunikacja klient serwer wygląda i z jaką częstotliwością się odbywa?

1

@anckor: W opisie, który przesłałeś jest mowa o liczbie przesłaniach pakietów od użytkownika do serwera, a nie liczbie wymienionych danych. Te rzeczy nie mają ze sobą nic wspólnego. Pakiety powinny dotrzeć do serwera w ustalonej częstotliwości, ale z opóźnieniem = ping.

2

Ogólnie to temat nie jest prosty.

https://gafferongames.com/

Tutaj jest dużo materiału.

Chyba najważniejsze trzy artykuły:
https://gafferongames.com/post/networked_physics_2004/
https://gafferongames.com/post/state_synchronization/
https://gafferongames.com/post/snapshot_interpolation/

I trochę to samo (ale mniej) w formie video: https://www.gdcvault.com/play/1022195/Physics-for-Game-Programmers-Networking - na filmie Pan, który napisał te wszystkie artykuły.

Też tutaj Pan (ale już inny) tłumaczy frontend (silnik gry, to co user generalnie widzi) i backend (to czego user nie widzi, jakieś wybieranie serwerów, hostowanie, rankingi, itd) gier online (bardzo dużo praktycznej wiedzy)

Jeszcze bym dodał to jak się robi duże MMORPG (bardzo dużo praktycznej wiedzy)
http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/
http://t-machine.org/index.php/2007/11/11/entity-systems-are-the-future-of-mmog-development-part-2/
http://t-machine.org/index.php/2007/12/22/entity-systems-are-the-future-of-mmog-development-part-3/
http://t-machine.org/index.php/2008/03/13/entity-systems-are-the-future-of-mmos-part-4/
http://t-machine.org/index.php/2009/10/26/entity-systems-are-the-future-of-mmos-part-5/

1 użytkowników online, w tym zalogowanych: 0, gości: 1