Co obejmuje prosta gra UDP?

17

Kiedyś próbowałem napisać prostą grę z UDP w ciągu tygodnia jako test jednorazowy. Poszło okropnie.

Wyrzuciłem to wcześnie. Głównym problemem, jaki miałem, było przywrócenie stanu gry wszystkich graczy / wrogów / obiektów do starego stanu i szybkie przewinięcie gry do momentu, w którym gracz gra (tj. Pół sekundy przed skokiem. Trochę wcześnie lub późno może spraw, aby gracz przegapił skok)

Może ta metoda nie jest najłatwiejsza? Podejrzewam, że tak, ale od początku zaprojektowałem go źle i zrealizowałem pod koniec drugiego dnia. (więc nie nauczyłem się zbyt wiele lub zmarnowałem tyle czasu)

Dla mnie i innych. Co obejmuje prosta gra UDP i jak ją napisać? Lub jak rozwiązać problem z przywracaniem stanu do prawidłowego stanu.

Oznaczę to jako CW bc, wiem, że będzie wiele pomocnych odpowiedzi.

1047
źródło

Odpowiedzi:

9

Glenn Fiedler napisał na ten temat doskonały zestaw artykułów , który obejmuje prawie wszystkie podstawowe pojęcia.

falstro
źródło
Artykuł o zmiennoprzecinkowym zdeterminowanym zawalił mi głowę. Jego zły stan synchronizacji nie jest wykonywany, ponieważ to ten, który chciałem przeczytać. Chociaż determinizm zmiennoprzecinkowy odpowiada na wiele pytań.
Żaden z tych artykułów nie
porusza
3

Opracowanie własnego może mieć charakter edukacyjny, ale często możesz zrobić więcej, jeśli możesz wykorzystać istniejącą implementację (lub przynajmniej zacząć od tego miejsca).

Użyłem zarówno ENet, jak i Raknet . Użyłem Eneta tylko w prostej grze, ale zrobił to, czego potrzebowałem. Enet używa API niższego poziomu niż Raknet. Raknet został wykorzystany w większym projekcie. Raknet jest niezwykle potężny, ale chce, abyś zbudował swoją grę w oparciu o ramy Raknet.

Enet:

  • Zarządzanie połączeniami
  • Sekwencjonowanie
  • Kanały
  • Niezawodność
  • Fragmentacja i ponowny montaż
  • Zbiór
  • Zdolność adaptacji
  • Ruchliwość
  • Wolność

Raknet:

  • Replikacja obiektów
  • Autopatcher
  • Bezpieczne połączenia
  • Solidna warstwa komunikacyjna (w zasadzie wszystkie funkcje Enets zebrane w jednym elemencie)
  • Zdalne wywołania procedur
  • Komunikacja głosowa
  • Przebijanie NAT
deft_code
źródło
+1 dla ENet, używam go od dłuższego czasu dla klientów i im się podoba.
Len Holgate
Pyta
-1, z tego samego powodu, co BlueRaja
Jonathan Dickinson
2

Jeśli masz czas i energię, możesz pobrać źródło Quake 3 i przestudiować je. Jest to dość łatwe do zrozumienia, jeśli czujesz się komfortowo z C i równie łatwe do majstrowania.

Jakie inne gry wieloosobowe mają dostępne źródło i używają UDP?

BRaffle
źródło
1
Jest też artykuł opisujący kod. trac.bookofhook.com/bookofhook/trac.cgi/wiki/Quake3Networking
zooropa
0

Jeśli pójdziesz do domu (tak jak ja), nauczysz się ton - także o rzeczach, których nie chciałeś wiedzieć. Podobnie jak w przypadku translacji NAT. Według Caspina Enet tego nie zauważa, ale zawsze można znaleźć kod STUN typu open source, który działa w większości sytuacji.

Jonas Byström
źródło