Autor Wątek: Komunikacja klient - serwer  (Przeczytany 2979 razy)

Offline Handy

  • Użytkownik

# Luty 06, 2014, 21:12:02
Witajcie,
mam takie pytanie czysto teoretyczne bo nie mogę znaleźć w sieci odpowiedzi. Mam prostą gierkę, chodzenie ludzikiem po planszy kafelkowej i klawisz A uruchamia przed sobą animacje(fala na 2 kratki, coś ala atak powiedzmy). Mam takie pytanie co powinno być w kliencie a co na serwerze? Udało mi się dotychczas z sieci zrobić prosty "ping(klient wysyła) pong(serwer odbiera)". Ciekawi mnie także to co przesyłać do serwera? Czy wciśnięty klawisz i aktualizować to z serwerem i rozsyłać do klientów(to już odległe marzenia, zrobienia wielowątkowości). Proszę mi odpisać i nie robić spamu bo nigdzie nie jest to ładnie opisane co w takich sytuacjach się robi.

pozd. Handy

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Luty 06, 2014, 22:54:51
Przesyłać warto to, co dotyczy logiki gry, a więc że jakiś gracz wcisnął atak - a nie że trzeba wyświetlić następną klatkę animacji - i to rozsyłać do pozostałych graczy. Wyświetlaniem każdy z klientów może się zająć sam. Tak więc każdy klient zacznie animację ataku ludzika własnego wtedy, kiedy gracz wcisnął klawisz A, a każdego innego ludzika, jeśli dostanie wiadomość od serwera, że tamten ludzik wcisnął atak.

Offline Handy

  • Użytkownik

# Luty 06, 2014, 23:53:28
No dobra kapuje a jak później dopisze sobie funkcje chodzenia myszką lub mój ludzik będzie miał jakieś eq(ekwipunek, np. miecz) i wyrzucę go na mapie to jak to przesłać? Wiem banalne pytania pewnie dla Was i bardzo głupie ale ciężko mi jest t zrozumieć, sam nie dam rady.

Offline Ivian

  • Użytkownik
    • Ivian's Cave

# Luty 07, 2014, 11:33:50
Zależy jak bardzo otwarty masz świat. Jak jakiś super duży, to zrób sobie GetObjectsOnChunkLoad() a jak jakiś mały, to wysyłasz na serwer akcje upuszczenia przedmiotu (np. jakiś klawisz jak w csie) i potem server robi broadcast, żeby stworzyć graficzną reprezentację obiektu u wszystkich klientów.

Offline Handy

  • Użytkownik

# Luty 08, 2014, 13:35:31
1. coś ala Tibia, gierka 2d więc świat nie jest mały tak powiedzmy, że 100 osób jest online. Rozumiem, że mam przesyłać to co widzi klient i powiedzmy po 5 kratek w każdą strone poza ekranem.
2. macie jakiś materiał, znacie jakieś tytuły z których można się dowiedzieć bardziej co przesyłać i jak

Offline Ilddor

  • Użytkownik

# Luty 08, 2014, 16:21:43
1. Przede wszystkim jeśli chcesz zrobić gierkę na 100 osób to będziesz musiał zoptymalizować komunikacje serwer <-> klient, tzn. przemyśl dokładnie co musi być przesyłane i skróć to w największym stopniu, wszystkie niepotrzebne informacje odrzuć. 
Ja bym to zrobił tak, że klient do serwera wysyła tylko eventy sterowania np. "chce użyć umiejętności y w kierunku z",  a serwer realizuje logikę i zwraca eventy typu "gracz x używa umiejętności y w kierunku z", plus dodatkowo jak gracz zmieni chunk to serwer dosyła te chunki, które pojawiły się w polu widzenia (tutaj najlepiej zrobić tak że gracz wcześniej posiada mapę, aby uniknąć wysyłania całej mapy a wysyłać tylko obiekty znajdujące się na danym chunku a gracz samą mapę ładuje z dysku).

2. Tytułów niestety żadnych nie znam, ale dobry nawyk do którego sam się stosuję: w sieciówkach komunikacje ograniczać do niezbędnego minimum, plus przenieść cała logikę na serwer a klientom zostawić sterowanie i wyświetlanie. Plusy takiego programowania sieciówek są takie, że są on wydajne połączeniowo  - nie potrzeba do niej dobrego łącza, oraz są zabezpieczone przed hackami - serwer gry realizuje logikę więc jedyny sposób hacka to zhackować serwer. Wada jest taka, że serwer potrzebuje wtedy więcej mocy, ale moim zdaniem łatwiej o większą moc niż załatwianie światłowodu:)

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Luty 10, 2014, 23:32:01
To jest o tyle skomplikowane, że nie da rady na przykład przesłać do serwera komunikatu, że gracz używa umiejętności, a jej efekty (np. jakieś cząsteczki) pokazać dopiero, kiedy od serwera wróci rozesłana do wszystkich wiadomość na ten temat. Byłoby zbyt duże opóźnienie od naciśnięcia przycisku do zobaczenia efektów na ekranie. Efekty trzeba zacząć pokazywać od razu, a u tego gracza serwer tylko niejako potwierdza, że umiejętności faktycznie udało się użyć. U pozostałych graczy oczywiście zacznie się to pokazywać dopiero, jak dostaną ten komunikat.

Offline MoHeR

  • Użytkownik

# Luty 10, 2014, 23:56:06
Cytuj
klawisz A uruchamia przed sobą animacje(fala na 2 kratki, coś ala atak powiedzmy).
Wiec powiedz serwerowi, ze wcisnales klawisz 'A', a on niech sie martwi, co sie wtedy stanie.
Kiedy serwer ustali, jakiej profesji jest gracz i jaka umiejetnosc kryje sie pod przyciskiem 'A', rozsyla do innych userow wiadomosc, ze user x uzyl umiejetnosci y.
Serwer wtedy wypuszcza wirtualna fale (zadnej grafiki, jedynie pozycja i wielkosc) i kiedy fala na serwerze udezy w jakiegosc playera, serwer znow rozsyla informacje do wszystkich userow, ze user x oberwal za y obrazen od usera z.