Jaklub Opublikowano 23 Kwietnia 2009 Udostępnij Opublikowano 23 Kwietnia 2009 Co zrobić aby zsynchronizować grę w 39dll? Wszystkie poradniki które znam nie mają żadnych informacji na ten temat. na czym polega problem. przypuśćmy, że strzelam do innego gracza. u mnie widać, że pocisk go trafia, ale on go unika. Pocisku już nie ma, ale gracz został niezraniony. Jaka jest najlepsza metoda synchronizacji gry? Mnożenie odległości startowej pocisku od gracza to chyba niezbyt dobry pomysł (zwłaszcza gdy ping jest ogromny). Czy "oczekiwanie" na innych graczy i zwolnienie gry to jedyny sposób? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cekol Opublikowano 23 Kwietnia 2009 Udostępnij Opublikowano 23 Kwietnia 2009 Serwer co stepa wysyła swój "czas" czyli 'current_time' do wszystkich klientów, i zapisują ją sobie do jakiejś zmiennej globalnej np. global.server_current_time Potem gdy klient "strzela" wysyła też zawartość zmiennej server_current_time. Gdy informacja "odbije się od serwera" i dojdzie do innych klientów, klient porównuje zmienną z czasem strzału którą otrzymał, ze zmienną global.server_current_time po czym oblicza laga :P czyli np: fire_time - zmienna czasu strzału którą odebraliśmy global.server_current_time - zmienna czasu serwera boost - przyśpiesze które musi być wywołane w pocisku aby dorównać lagowi speed - szybkość pocisku direction - kierunek pocisku Teraz tworzmy obiekt przypisując mu zmienną czyli np: GML pocisk= instance_create(x,y,twojpocisk) pocisk.boost= (global.server_current_time-fire_time)/60 a w pocisku w stepie dajemy dodajemy kodzik: GML if boost >0 { x+=lengthdir_x(boost*speed,direction) y+=lengthdir_y(boost*speed,direction) boost=0 } Mam nadzieję że pomogłem :D Jak by co to wal na gg ;> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 23 Kwietnia 2009 Autor Udostępnij Opublikowano 23 Kwietnia 2009 Spróbuję tą metodą, ale nie wiem, czy jest najlepsza. Z pewnością zmodyfikuję skrypt "dostosowywania" się pocisku do laga, bo tak to może przeniknąć przez ścianę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cekol Opublikowano 23 Kwietnia 2009 Udostępnij Opublikowano 23 Kwietnia 2009 A i powinieneś zrobić jeszcze zrobić dodatkowy obiekt np 'obj_timer' który co stepa będzie dodawał czas do 'global.server_current_time' bo przecież wszędzie sekundy upływają tak samo. W takim obiekcie daj w create: GML delta_time=current_time a w stepie: GML if variable_global_exists('server_current_time') { global.server_current_time+= (current_time - delta_time) delta_time=current_time } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pieter Opublikowano 23 Kwietnia 2009 Udostępnij Opublikowano 23 Kwietnia 2009 Co zrobić aby zsynchronizować grę w 39dll? Wszystkie poradniki które znam nie mają żadnych informacji na ten temat. na czym polega problem. przypuśćmy, że strzelam do innego gracza. u mnie widać, że pocisk go trafia, ale on go unika. Pocisku już nie ma, ale gracz został niezraniony. Jaka jest najlepsza metoda synchronizacji gry? Mnożenie odległości startowej pocisku od gracza to chyba niezbyt dobry pomysł (zwłaszcza gdy ping jest ogromny). Czy "oczekiwanie" na innych graczy i zwolnienie gry to jedyny sposób? najlepiej? kiedy wysyłasz pakiet strzelania do servera, ale nie tworzysz obiektu, wysyłasz tylko dane, no i server śle do wszystkich i do Ciebie też... aha, i najlepiej by było gdyby server też decydował czy pocisk trafił i odebrał hp czy nie. 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ę