Skocz do zawartości

Jak uniezależnić prędkość gry od fpsów?


Rekomendowane odpowiedzi

  • Filar Społeczności

widzisz, chodzi mi o to, że prędkość gry zależna jest od ilości klatek na sekundę i przez to chociażby na szybkim komputerze gra jest za szybka i kongruentnie na wolnym za wolna

Odnośnik do komentarza
Udostępnij na innych stronach

sle pierniczycie. GM opiera sie o metode fixed time steps, a autorowi zalezy na uzyskaniu delta time steps. robi sie to prosto: liczenie delta time polega na policzeniu roznicy czasu miedzy aktualna, a poprzednia klatka (wynik przydatny najczesciej w sekundach).

jakis obiekt kontrolera gry w roomie:

GML (create)
_lastTimeStamp = current_time;

global.deltaTimeMillis = 0;

global.deltaTimeSeconds = 0;

GML (step)
var timeStamp = current_time;

global.deltaTimeMillis = timeStamp - _lastTimeStamp;

global.deltaTimeSeconds = global.deltaTimeMillis * 0.001;

_lastTimeStamp = timeStamp;

uzyskane delta time mnozy sie przez wszelkie wartosci, ktore dotycza animacji w czasie. czyli wszelkiego rodzaju zmiany pozycji:

GML (step)
x += _jakis_speed * global.deltaTimeSeconds;
Odnośnik do komentarza
Udostępnij na innych stronach

Co do uniezależnienia prędkości obiektu od ilości klatek, to chyba można skorzystać np. z takiego czegoś:

boost = maksymalna_ilość_klatek/aktualną_ilość_klatek

A potem np. hspeed = prędkość*boost.

Wydaje mi się, że to da rade.

Przykładowo:

maxFPS - 60, ilość FPS - 60, prędkość - 3

prędkość = 3*(60/60)

prędkość = 3

---------------------------

maxFPS - 60, ilość FPS - 30, prędkość - 3

prędkość = 3*(60/30)

prędkość = 6

Myśle, że to wystarczy.

 

EDIT: Ale widze, że YXE już wstawił wersje standardową.

Odnośnik do komentarza
Udostępnij na innych stronach

Co do uniezależnienia prędkości obiektu od ilości klatek, to chyba można skorzystać np. z takiego czegoś:

boost = maksymalna_ilość_klatek/aktualną_ilość_klatek

A potem np. hspeed = prędkość*boost.

Wydaje mi się, że to da rade.

Przykładowo:

maxFPS - 60, ilość FPS - 60, prędkość - 3

prędkość = 3*(60/60)

prędkość = 3

---------------------------

maxFPS - 60, ilość FPS - 30, prędkość - 3

prędkość = 3*(60/30)

prędkość = 6

Myśle, że to wystarczy.

 

EDIT: Ale widze, że YXE już wstawił wersje standardową.

To by było bardzo nieprecyzyjne.

Odnośnik do komentarza
Udostępnij na innych stronach

Precyzja current_time jest ograniczona (update dokonuje się co 16+2/3 ms). Jeśli chcesz zrobić porządny delta time, to masz dwie opcje:

1. ściągnąć sobie High Resolution Timer i zastosować kod YXE

2. przejść na darmowego GM: Studio, gdzie masz nie tylko wbudowany timer działający na zasadzie powyższego, ale też wbudowaną funkcję delta_time, która dokonuje obliczeń za ciebie (zalecana metoda).

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

w sumie racja, czas jednak stawić czoła faktu, jakoby dalsze użytkowanie na ósemce ma już wymiar zaledwie nostalgiczny. Sajonara, dzięki za konstruktywną gównoburzę :))

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ę...