Sztuczki w mechanice gry, aby uniknąć radzenia sobie z kompensacją opóźnień w sieci?

20

Wdrożenie kompensacji opóźnień w sieci jest trudne, jak tego uniknąć?

Może można zastosować sztuczki i zbudować mechanikę gry w taki sposób, że opóźnienie byłoby postrzegane jako niekrytyczna, a nawet naturalna część gry?

Jakie są te techniki i czy istnieją jakieś gry (MMORPG, Strategie, ...), które korzystają z takich technik?

AKTUALIZACJA:

Gry turowe nie wymagają kompensacji opóźnień, ale byłoby interesujące zobaczyć podejście w czasie rzeczywistym (lub po prostu wrażenie ważnej części w czasie rzeczywistym - użytkownik nie powinien być blokowany i zmuszany do oczekiwania).

Głównym powodem, dla którego unikałem kompensacji opóźnień, jest prostota.

Alexey Petrushin
źródło
6
Jeśli chcesz zbudować grę, w której opóźnienie nie jest problemem; rozważ zbudowanie czegoś opartego na turach, gdzie kilka sekund jest do przyjęcia.
Vaughan Hilts,
3
Łącze Valve polega na dość skomplikowanych sposobach implementacji kompensacji opóźnień w sieci - więc jest to przeciwieństwo tego, o co pyta pytanie.
Kylotan,
@JohnMcDonald Tak, wiem o tym artykule z Valve i jak już wspomniano - jest odwrotnie niż pytam :).
Alexey Petrushin
Możesz także zajrzeć na GGPO: ggpo.net
Przyzwoitość

Odpowiedzi:

16

Klient często stosuje informację zwrotną, aby natychmiast poinformować gracza, że ​​wybrana czynność została zarejestrowana, np .:

  • dźwięk interfejsu (np. kliknięcie przycisku)
  • dźwięk w świecie (np. postać mówiąca „od razu dowódca”)
  • animacja (np. zacznij machać mieczem)

Może to mieć miejsce, gdy informacje docierają do serwera, aby gracz nie zdawał sobie sprawy, że ich akcja jeszcze się nie rozpoczęła. Tak długo, jak serwer szybko odpowie, a akcja zacznie się wkrótce, gracz może nie zauważyć opóźnienia.

Te sztuczki działają w grach, w których wkład gracza jest dość rzadki, a zatem ilość czasu spędzonego na oczekiwaniu na efekt jest stosunkowo niewielką częścią całkowitego czasu spędzonego na grze. Dlatego chciałbyś znaleźć sposoby na ustrukturyzowanie gry, tak aby gracz dokonywał mniejszej liczby wejść. To prawdopodobnie oznacza, że ​​działania gracza będą bardziej abstrakcyjne, a gra będzie implementować zachowanie na niskim poziomie. Przykłady:

  • zastąpić mechanikę kierowania mechaniką ścieżki
  • zastąpić mechanikę celowania mechaniką wyboru celu
  • zastępuj instrukcje walki za rundą bardziej planami taktycznymi lub strategicznymi
  • zastąpić ciągłą rozgrywkę w czasie rzeczywistym / systemami dyskretnymi / turowymi
Kylotan
źródło
1
Dzięki, sformalizowałeś to, o co jestem proszony - używaj rzadkich, odroczonych danych wejściowych od gracza. Byłoby interesujące zobaczyć rzeczywiste gry, które tego używają.
Alexey Petrushin
2
Setki gier w pewien sposób wykorzystują takie rzeczy, ale najprawdopodobniej zrobiono to z innych powodów, a opóźnianie ukrywa korzystny efekt uboczny.
Kylotan
7

Losowe przemyślenia:

  1. oszukiwać: używać rakiet . Rakiety wybuchają w promieniu, ukrywając wszelkie dziwności.
  2. cheat: z góry ustal wynik i zmuś warunek do wystąpienia wizualnego
  3. cheat: ataki wymagają czasu , ukryj opóźnienia w atk + anim + nieciągłość wyników
  4. cheat: odłącz lokalne informacje zwrotne od sieci
  5. cheat: dużo efektów wizualnych lub aktywności na ekranie, które obejmują każdą dziwność.
  6. przed kontynuowaniem użyj projektu reakcji na reakcję, który wymaga rozdzielczości

Więc tak, dużo oszukiwać.

Patrick Hughes
źródło
4

Odpowiedź jest dość prosta - po prostu twórz gry, które nie mają sekcji krytycznych czasowo. Chcesz uniknąć implementacji tego rodzaju interpolacji z konkretnego powodu, który rozumiem, co oznacza, że ​​nie martwisz się drżącą i szybką grą. Jest to doskonale przystosowane do wielu gier, w tym do Civilization (która jest grą strategiczną). Należy jednak pamiętać, że NIE jest to możliwe w przypadku gry strategicznej w CZASIE RZECZYWISTYM , w której trzeba przesyłać dużą ilość danych przez sieć w różnych momentach. Jeśli chcesz zaprojektować grę w sieci o bardzo dużych opóźnieniach, rozważ następujące kwestie:

  1. Twórz gry turowe. W tego typu grach wprowadzanie stanu w czasie rzeczywistym nie jest potrzebne, a inny gracz może po prostu wcisnąć stan gry do swojego klienta, kiedy nadejdzie jego kolej. Zmniejsza to presję na sieć i pozwala na opóźnienia nawet o kilka sekund, jeśli ktoś sobie tego życzy. Civilization to gra turowa, która jest bardzo popularna, podobnie jak strategia.
  2. Ograniczaj decyzje innych graczy do minimum. Jeśli Twoja gra jest strategiczna i nie możesz grać w turę, rozważ zmniejszenie wpływu opóźnionych pakietów. Czy klient może wykonać większość symulacji? Przykładem może być gra strategiczna, w którą gra się przez chwilę, a potem, powiedzmy, 16 minut, symuluje się przeciwko innemu graczowi (być może gra walki, w której gracze wysyłają żołnierzy co x interwału i raportują co y interwał.

Mam nadzieję, że to trochę pomoże; bez znajomości konkretnych pomysłów na grę jest to trudne. Zakładam, że masz powody, dla których chcesz stworzyć grę w oparciu o taki wzorzec (prostota, oszczędność pasma, zmniejszona złożoność sieci)

Vaughan Hilts
źródło
4

Możesz także sprawić, że lag będzie częścią twojej gry ze względu na „realizm”. Załóżmy, że Twoi gracze mają kontrolować niektóre roboty z dystansu, możesz zmusić opóźnienie do co najmniej 500 ms lub 1 s (musisz wdrożyć system dynamicznego wypełniania opóźnień).

Arkh
źródło
To niezły zwrot
akcji
0

Dobrą sztuczką jest po prostu ukrywanie działań graczy. Wiele gier FPS właśnie to robi. Nie wyświetlają żadnych elementów wizualnych większości pocisków, odtwarzane są tylko dźwięki, a wynik otrzymuje się w postaci obrażeń zadawanych graczom.

Grałem w niektóre gry FPS, w których bronie o wysokiej celności (snajperzy i takie) miały bardzo wyraźne efekty wizualne i można było zobaczyć, że drugi gracz strzelił za tobą, ale z powodu kompensacji opóźnienia zostałeś zabity.

VSZM
źródło