Skocz do zawartości

Porady odnośnie delta time w projekcie.


Rekomendowane odpowiedzi

Tak jak w temacie, macie jakieś porady na temat stosowania delta time? Tworzę grę platformową i przerabiam ją na frame independent. Mam jeden obiekt główny, który odpowiada za większość akcji w grze, to w nim przeliczam deltę i inne obiekty pobierają wartość delty z niego. Poczytałem sobie trochę różnych rzeczy w internecie na temat delty w GM i im więcej czytam tym mniej wiem :D Jedni uważają, że to standard, inni natomiast odradzają używania delty. Są też sprzeczne informacje co do tego, co mnożyć przez deltę a co nie. Gdzieś wyczytałem, że np w platformówce grawitacje powinno mnożyć się przez deltę ale np taki skok "jumpimpulse/jumpforce" już nie, choć moje doświadczenie pokazuje, że to bez sensu :/ Czy powinienem ograniczać minimalną i makysmalną wartośc delty do jakieś konkretnej wartości? Rozumiem, że zbyt duża wartość delty może rozwalić mi grę poprzez teleportacje obiektów, błędy w systemie kolizji itd. Chętnie poczytam coś na ten temat od ludzi, którzy stosowali w swoich projektach deltę i mają kilka rad i wskazówek.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Ja generalnie nigdy nie stosowałem, bo nie robiłem gier, w których jest to niezbędne, lub które lagują :D Ogólnie uważam, że delta jest WYMAGANA w grach online, żeby rozwiązać problem lagów. Nie wiem czy jest sens używac jej w platformówce typu mario - jak spadnie FPS to spadnie, postać ruszy się wolniej, chyba lepiej niż gdyby przeskoczyła od razu o 3 klatki animacji bo delta time nadrabia to co gra nie wyrobiła :) A np. to, gdzie doleci pocisk i sprawdzanie, czy przez jego prędkość nie przeleci przez ścianę (np. jak ściana ma 32 piksele szerokości, a prędkości pocisku wynosi 40, to możliwe, że kolizja nie zajdzie), to do tego bym używał collision_line(x,y,xprevious,yprevious), delta time w ogóle nie rozwiąże sprawy.


Jeśli wiec nie robisz gry online czy bijatyki i zakładasz, że nie będzie lagować (a jak będzie, to coś robisz źle, więc napraw powód lagowania), to też uważam, że to zbędny bajer.

Odnośnik do komentarza
Udostępnij na innych stronach

Sytuację możesz porównać do jednego przykładu. Sprawdzania kolizji. W razie spadku FPS przy kolizji jest duże prawdopodobieństwo, że obiekt po przemnożeniu przez delta_time wpakuje się do wnętrza kolizji. Wtedy musisz rozwikłać tę kolizję. Sposoby ogólnie są 2: cofasz do poprzedniej pozycji a potem co pixel starasz się przysujać obiekt jak najbliżej kolizji, albo od razu cofasz obiekt co pixel by wyszedł z kolizji. Oba przypadki wymagają od ciebie sprawdzania kolizji w pętli co trochę może spowolnić grę.

Luźny przykład, prawda? Ale twoje obiekty w platformówce będą to pewnie robić 60 razy na sekundę stojąc na ziemi. Przelicz czy warto.
 

Odnośnik do komentarza
Udostępnij na innych stronach

59 minut temu, gnysek napisał:

Nie wiem czy jest sens używac jej w platformówce typu mario - jak spadnie FPS to spadnie, postać ruszy się wolniej,

Albo szybciej, ~2x szybciej, wystarczy przerzucić się na monitor 120hz/144hz/240hz i gra może okazać się niegrywalna. :P Ale to oczywiście dotyczy jak update będzie zsynchronizowany do odświeżania ekranu, jeżeli będzie cap na FPS 60fps, to wtedy posiadanie monitora o wyższym odświeżaniu nie ma kompletnie tutaj znaczenia, ale też odpada płynniejsza animacja i zysk z posiadania "szybszego" monitora jest żaden.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie spodziewałem się takiego hejtu na delta time :D Z tego co wiem, to jest to standard w dzisiejszych grach i to nawet tych indy, a tutaj takie odradzanie :) Stosowanie delty trochę komplikuje parę rzeczy to fakt, ale czy z tego powodu rezygnować z czegoś co jest normą w grach? Z tego co widzę, to użytkownicy innych silników stosują deltę jakby była czymś normalnym, a w przypadku GM'a to widzę, że są zdanie podzielone.

Odnośnik do komentarza
Udostępnij na innych stronach

Delta znośnie się sprawdza przy grach z silnikami fizycznymi. Tam sobie możesz pozwolić by w większości przypadków fizyka rozwiązała kolizje bo i tak będzie to robić. GM pozwala nam wystarczająco "niskopoziomowo" zejść by optymalizować kolizje lepiej, więc delta time potrafi być nie przydatne.
Poza tym tworzy masę bugów które ciężko zreprodukować :P

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

"Innych silników" - no jak robisz w Unity FPSa i chcesz, żeby leciało klatek ile fabryka dała, to jak wspomniał @Konrad-GM - delta time obowiązkowe, bo musisz utrzymać prędkość postaci i innych elementów względem tego co ekran pokazuje, a jest to zmienna liczba. Ale w GM robi się raczej sztywne ograniczenie (cap) właśnie na 60 FPS i wtedy jeśli to nie jest gra online, to średnio delta jest przydatna. Jak mówie, nie widzę problemu, gdy gra zgubi kilka klatek i zwolni, bo cała gra zwolni i gracz sobie z tym poradzi. Trzeba pamiętać, ze w GM draw i step są w sumie powiązane. A jak zakładasz, że Twoja gra na słabszych sprzętach nie utrzyma 60FPSów w GMie, to znaczy, że przedobrzyłeś z czymś :) GM to spadał poniżej 60FPSów na komórkach za 800zł w 2012, ale nie dziś.

Odnośnik do komentarza
Udostępnij na innych stronach

Ale w delcie chyba nie chodzi o to by ktoś mógł grać płynnie w stałych 15 fps na starym sprzęcie, a o to by radzić sobie z chwilowymi zrywami i nie mieć sytuacji, że postać podskoczyła niżej, bo w danym momencie miałeś spadek fps.Delta time nie jest od poprawiania performenc'u a po prostu niezależność od frameratu.

Odnośnik do komentarza
Udostępnij na innych stronach

No to wyobraź sobie że twój zryw FPS jest akurat u szczytu skoku i źle obliczy ci maksymalną wysokość. Albo podczas kolizji z przeciwnikiem/pociskiem? Jak rozwiążesz te problemy? delta time ogólnie dokłada więcej problemów niż rozwiązuje

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
22 godziny temu, Temporal333 napisał:

Ale w delcie chyba nie chodzi o to by ktoś mógł grać płynnie w stałych 15 fps na starym sprzęcie, a o to by radzić sobie z chwilowymi zrywami i nie mieć sytuacji, że postać podskoczyła niżej, bo w danym momencie miałeś spadek fps.Delta time nie jest od poprawiania performenc'u a po prostu niezależność od frameratu.

 

Jeżeli postać podskakuje na podstawie jakiegoś wzoru i nie masz pomijania klatek, to nie ma za bardzo opcji, aby skoczyła niżej. W takich sytuacjach po prostu pewnie rzeczy trwają dłużej, ale w całej grze i tyle. Kod wykona się tyle razy i tak jak chciałeś, tylko w wolniejszym czasie - to jest jedyny problem jaki można napotkać w GMie. Dlatego jest to problem jedynie przy grach online, gdzie musi być sync między klientami.

Odnośnik do komentarza
Udostępnij na innych stronach

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...