Zrobiłem to dla komercyjnej gry wyścigowej PSP, która działała zarówno w sieci ad hoc, jak i za pośrednictwem bezprzewodowego punktu dostępowego. (Lub do statycznego serwera w Internecie, jeśli to konieczne)
Z powodu punktu 2 system nie musi być skomplikowany pod względem optymalizacji
Z mojego doświadczenia to nie jest prawda. Urządzenia bezprzewodowe (zwłaszcza małe przenośne) nie są jak komputery z przewodowymi połączeniami sieciowymi - smartfony i bezprzewodowe konsole do gier mają zwykle powolne interfejsy sieciowe do celów gry.
Nie zrozum mnie źle - ich przepustowość jest zwykle dobra (to znaczy ilość danych na sekundę; świetna do przesyłania strumieniowego filmów itp.), Ale opóźnienie dostarczenia określonego pakietu może być bardzo złe i może być tak bardzo zmienna, że trudno jest nawet oszacować, ile czasu zajmie dostarczenie dowolnego pakietu. Ta odmiana staje się jeszcze gorsza, gdy więcej urządzeń bezprzewodowych jest umieszczonych razem w jednym ogólnym obszarze, ponieważ ich sygnały zaczynają się wzajemnie zakłócać. W rezultacie sporo czasu spędziłem na zmniejszeniu liczby pakietów, które musiały zostać wysłane, abyśmy mieli mniej kolizji pakietów. (Należy pamiętać, że jest to nieco mniejszy problem w przypadku, gdy zaangażowany jest hotspot sieci zasilanej, zamiast gdy urządzenia komunikują się ze sobą bezpośrednio przez sieć ad hoc)
Jako przykład tego rodzaju optymalizacji nasza gra wyścigowa odbyła się w świecie, który miał sygnalizację świetlną. Tysiące z nich. Musieliśmy się upewnić, że ich sygnały są zsynchronizowane między wszystkimi graczami w sesji sieciowej. Zamiast próbować wysyłać pakiety z informacją, które światła były w jakim stanie, zdefiniowaliśmy statyczny harmonogram dla wszystkich świateł, a następnie upewniliśmy się, że wszyscy klienci zgodzili się na bieżący „czas gry”. Ponieważ wszyscy znali czas gry, a wszystkie stany sygnalizacji świetlnej można było ustalić na podstawie czasu gry, zsynchronizowaliśmy wszystkie te dane stanu, nie wysyłając żadnych specjalnych danych. Ta jedna zmiana zrobiła ogromną różnicę w wydajności naszej sieci.
To, co powiedziało, ustanowienie niezawodnej synchronizacji zegara między wieloma urządzeniami bezprzewodowymi (z bardzo różnymi czasami pingów spowodowanymi głównie utratą pakietów) było ogromnym wyzwaniem. Z przyjemnością porozmawiamy o tym więcej, jeśli jesteś zainteresowany.
Każdy klient może być wiarygodnym źródłem danych o sobie i jego najbliższym otoczeniu (na przykład punktory).
Tak właśnie zrobiliśmy i działało to dobrze w naszej sytuacji (samochody). Problematyczną częścią jest oczywiście sytuacja, gdy obiekt przestaje być bliżej gracza „a” niż gracza „b”, a jego własność przenosi się z jednego gracza na drugiego.
W rzeczywistości jest to zaskakująco skomplikowana negocjacja między graczami, w której gra „a” proponuje grę „b”: „Myślę, że ten obiekt jest bliżej ciebie. Powinieneś go przejąć”. I wtedy gra „b” może albo zaakceptować, albo odrzucić, w oparciu o własny pogląd na sytuację. Różnice w postrzeganym stanie gry między „a” i „b” oraz zmiana czasu między wysłaniem i otrzymaniem żądania i odpowiedzi sprawia, że jest to wyjątkowo nieprzyjemna negocjacja w celu uzyskania wiarygodności i może łatwo przerodzić się w grę „gorący ziemniak”, a własność obiektu nieustannie podskakuje między wieloma graczami. I nawet jeśli działa poprawnie, patrząc z punktu widzenia gry „c”, tam „
Moją intuicją jest to, że tego rodzaju podejście do „posiadania obiektu” może być zbyt skomplikowane dla małych, krótkotrwałych obiektów, takich jak pociski. Użyliśmy go w samochodach drogowych i kierowcach AI, które żyły w symulacji przez stosunkowo długi czas. Wydaje się, że bardziej wydajnym podejściem, jeśli chcesz zaufać klientom, byłoby posiadanie przez każdego gracza swojej pozycji i pocisków oraz deklarowanie, kiedy gracz został trafiony pociskiem innej osoby. (Tak więc jako „gra A” jestem odpowiedzialny za określenie, gdzie znajdują się pociski gracza A i gracza A, ale gracz B jest odpowiedzialny za stwierdzenie, czy trafiłem gracza B). Przy pewnym dobrym liczeniu martwych powinieneś być w stanie uzyskać całkiem rozsądne zachowanie z takiego systemu.