Exigo Opublikowano 20 Stycznia 2012 Udostępnij Opublikowano 20 Stycznia 2012 Najpierw napiszę o co mi chodzi. ; ) Jeśli założymy, że przemieszczamy obiekt w układzie który nie jest w stanie wpłynąć na zmianę pozycji. Najprostszym przesyłaniem danych będzie zwykły "input-output", gdzie filozofią będzie przewidywanie ruchów na serwerze. W grę wchodzi tylko TCP, a dane są zawsze bezbłędne na wszystkich klientach. Proste jak flaki z olejem. Ale do tego tematu trzeba podejść inaczej, jeśli układ w którym jest nasz obiekt, może czasami losowo (lub na pewnych, ale nadal nieprzewidywalnych zasadach) na niego wpłynąć. Wtedy powyższy pomysł input-output zwyczajnie odpada. Prostszym rozwiązaniem jest wtedy mityczne przesyłanie pozycji, i mamy to z głowy. Tylko że jeśli przesyłamy dwa shorty co klatkę, rozmyślamy się bo wiemy że to za dużo, i kombinujemy dalej. Jakiś pomysł? Moje zasady obiektu (jakie przychodzą mi do głowy) są dwie: - przemieszcza się w układzie o szerokości i wysokości shorta (czyli od -32768 do 32767). - co stepa maksymalnie może przemieścić się w polu koła o promieniu od 0 do 255, i o kącie od 0 do 360 (kąt możemy przekształcić na zakres byte (0-255), dzieląc przez 1,4). (Przemieszczenie możemy też opisać wektorowo, odejmując nową pozycję od starej. Uzyskamy to samo, ale w polu kwadrata o szerokości 255x255. Bardziej odpowiadającym tym wymaganiom będzie jednak pierwszy sposób, w kole, ze wzg. na sposób poruszania (trygonometryczny)). To co wymyśliłem to: - Jeśli nastąpi jakiekolwiek przemieszczenie, przesyłam trzy wartości (np. co 2 klatki), gdzie pierwsza to identyfikator (bajt mówiący jakie są dalsze bity), druga (bajt) to długość, trzecia (bajt) to kąt. - Co parę sekund przesyłam pozycje korygujące, czyli identyfikator paczki i dwa shorty (x i y). Wektory są obsługiwane w ten sposób, że co stepa aktualizują przemieszczenie, nawet jeśli gracz nie przesyła żadnych danych - w pewnym sensie "przewiduje" jego drogę, bo wiadomo że się przemieszcza. Wszystko jest przesyłane w miarę szybko, ale nie za dokładnie. Często skacze. Zakładam, że ktoś już miał kontakt z podobną tematyką i problemami, dlatego też jeśli macie jakieś pomysły lub pisaliście jakąś sieciówkę, podzielcie się doświadczeniem, proszę. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 20 Stycznia 2012 Udostępnij Opublikowano 20 Stycznia 2012 Można też przesyłać x-oldx i y-oldy wtedy zmieścisz się nawet w zakresie byta(na każdą oś), z dokładnością nie wiem jak wypada, ale myślę że dość dobrze. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 20 Stycznia 2012 Autor Udostępnij Opublikowano 20 Stycznia 2012 Tak, to jest układ w kwadracie o czym ty mówisz. Już o tym napisałem. ; ) Zostaję jednak przy kierunku i długości, ze względu na sposób poruszania. Porównując pole kwadratu do koła, ok, masz to samo. Tylko że pierwotna opcja pasuje bardziej ze względu na sposób poruszania (hm, jak by to powiedzieć: "lengthdirowo"), czyli w kwadracie obszary skrajnie odległe jak rogi by nie byłyby wykorzystywane. Poza tym nie muszę tego przeliczać, tylko od razu mam gotowe do przypisania dane. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 20 Stycznia 2012 Udostępnij Opublikowano 20 Stycznia 2012 @ediepl: to jest praktycznie to samo, co sposób 2. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 20 Stycznia 2012 Autor Udostępnij Opublikowano 20 Stycznia 2012 Tzn. przedstawię to w inny sposób, bardziej praktycznie obrazując: Jak napisalibyście przesyłanie pozycji za pomocą 39dll postaci znajdującej się w układzie pełnym skrzynek zintegrowanych z silnikiem fizycznym. :) A tak po za głównym wątkiem, mamy bajta, czyli całkowite od 0 do 255. Jak zapisać do niego binarnie dwie wartości o zakresie 0-128? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 20 Stycznia 2012 Udostępnij Opublikowano 20 Stycznia 2012 Do każdego klawisza dałbym funkcję przesyłającą ID wciśniętego/puszczonego klawisza. Na serwerze do każdego ID klawisza przypisałbym skrypt wykonywany przy naciśniętym/puszczonym klawiszu. I tak po naciśnięciu Left Arrow postać rusza się w lewo, po naciśnięciu Left Mouse Button postać strzela itd. Nie próbowałem nigdy takiego (ani innego : /) sposobu, słyszałem też, że są przy nim spore opóźnienia. Niemniej - staram się pomóc, poza tym wydaje mi się, że przy pomocy synchronizacji mogłoby nawet wypalić. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 20 Stycznia 2012 Administratorzy Udostępnij Opublikowano 20 Stycznia 2012 A jak trafisz na paralityka? Tak nie mozna. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 20 Stycznia 2012 Autor Udostępnij Opublikowano 20 Stycznia 2012 Nie chce cię wykorzystywać, ale możesz powiedzieć coś o przesyłaniu pozycji w almorze/aliensach? ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 20 Stycznia 2012 Udostępnij Opublikowano 20 Stycznia 2012 https://developer.valvesoftware.com/wiki/So...ayer_Networking Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 21 Stycznia 2012 Udostępnij Opublikowano 21 Stycznia 2012 mamy bajta, czyli całkowite od 0 do 255. Jak zapisać do niego binarnie dwie wartości o zakresie 0-128?0-255 = 8 bitów, 0-127 = 7 bitów. 14 bitów ewidentnie nie zmieści się w ośmiu : p Zmieścisz dwie wartości 0-15, i zapis: liczba = (a << 4) + b; Odczyt: a = liczba >> 4; b = liczba mod 16; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się