eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingprosty kod sieciowy do gierkiRe: prosty kod sieciowy do gierki
  • Data: 2012-02-26 18:45:53
    Temat: Re: prosty kod sieciowy do gierki
    Od: Karol Y <k...@o...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    >>> -) jak jakis sie zgubi to cala paczka nie dojdzie (a
    >>> prawdopodobienstwo tego rosnie z liczba pakietow)
    >>> }
    >>
    >> Ale czym Ty się przejmujesz? Jak masz w gnieździe coś do czytania, to
    >> czytasz, jak nie to wiesz że koniec pakietu. To czy pakiet się podzieli,
    >> czy dojdzie bez problemów w transmisji czy nie, tym już się zajmuje
    >> niższa warstwa.
    >>
    >
    > its okay t h e n (pl: to dobrze),
    > wroce do tematu kiedys pozniej - chyba ze ktos
    > chce wysnuc jakas opowiesc jak to sie robi, albo
    > jest w stanie podac od reki prosty kod wysylajacy
    > cyklicznie (np 10Hz) jakas strukture (np 10 intow)
    > i z drugiej strony cyklicznie ja odbierajacy (w
    > polaczeniu udp)

    Znasz taką gierkę CD2D(+)?

    Łączenie z serwerem, wymiana informacji o graczach przy podłączaniu,
    przesyłanie map, tekstur itp. szło po TCP. Gdy gracz się ostatecznie
    podłączył, w wątku (który miał sleepa na 1000ms/preferowana_ilosc_Hz)
    odpowiedzialnym za wysyłanie informacji typu broadcast, wysyłane były
    pakiety UDP z nagłówkiem (liczbą, determinującą co zawiera pakiet) i
    ciągiem bitów opisujących przesyłaną strukturę.

    Czyli np.

    100 - nagłówek mówiący, że to pakiet opisujący pozycję gracza
    14 - OX
    17 - OY

    Pakiet UDP był strumieniem do którego robiło się Write(Byte/Int...), jak
    na serwerze wątek, który czytał sobie to co jest w gnieździe dostał
    callbacka, że coś się pojawiło to czytał; ReadByte -> 100, switch(100)
    przerzucił go do odpowiedniego kawałka kodu odpowiedzialnego za
    uaktualnienie pozycji gracza i po sprawdzeniu, że pakiet i informacje są
    ok, w pętli foreach (gracz in lista_graczy-ten_co_przysłał) był
    dystrybuowany dalej.

    Oczywiście jak grało dwóch graczy z pingiem 200ms każdy, to informacje o
    położeniu przeciwnika uaktualniał z opóźnieniem 200ms (100ms jednego +
    100ms drugiego), więc stosowało się małą predykcję ruchu gracza w
    przypadku oczekiwania na kolejny pakiet od niego (oczywiście w
    rozsądnych granicach). To czy ktoś oberwał, to liczył i tak serwer
    (musiało się to na nim stać), więc większy lag tak jak w każdej innej
    grzej przeszkadzał lagerowi, a nie pozostałym.

    Generalnie wszystko dość zgrabnie działało i działa bodaj nadal, ale kto
    inny się już tym zajmuje.

    --
    Mateusz Bogusz

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: