Autor Wątek: Szybkość działania gry zależna od komuptera  (Przeczytany 2134 razy)

Offline mar08

  • Użytkownik

# Maj 26, 2007, 01:32:37
Nie wiem czy pisze w dobrym dziale, ale mniejsza z tym. Mam następujący problem. Zrobiłem prosta gierkę wyścigówkę wykorzystującą biblioteki Opengl i Winapi. Gra ma działać  w sieci i tu powstaje problem, ponieważ na różnych komputerach gra ta działa z inną szybkością - ten sam samochodzik jeździ szybciej lub wolniej. To samo zjawisko występuje gdy włączę tryb pełnoekranowy - gra działa wolniej, chociaż nie zmieniam, ale nie jet to regułą. Raz działa dobrze raz się wszytko chrzani. Ogólnie rzecz ujmując algorytm polega na tym że pojazd zwiększając prędkość przeskakuje o ustaloną większą liczbę pikseli. Nie wiem co mam zrobić. Gra jest naprawdę niewymagająca więc ograniczenia sprzętowe nie wchodzą w rachubę. Rozdzielczość jest stała. Brak mi pomysłów. Może ktoś pomoże?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Maj 26, 2007, 01:49:01
Cytuj
Ogólnie rzecz ujmując algorytm polega na tym że pojazd zwiększając prędkość przeskakuje o ustaloną większą liczbę pikseli.
A ile razy na sekundę przesuwasz ten samochód? :)

Offline SirMike

  • Użytkownik
    • SirMike's Techblog

# Maj 26, 2007, 01:55:02
Ogólnie rzecz ujmując algorytm polega na tym że pojazd zwiększając prędkość przeskakuje o ustaloną większą liczbę pikseli.

Tak nie mozesz robic. Musisz w animacji uwzglednic czas, ktory uplynal od ostatniej klatki i wg niego przesuwac obiekt o wyliczona ilosc pikseli.
Poszukaj na forum - bylo o tym nie raz.

Moze zacznij od tego http://forum.warsztat.gd/index.php/topic,2984.0.html

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Maj 26, 2007, 02:01:08
Tak nie mozesz robic. Musisz w animacji uwzglednic czas, ktory uplynal od ostatniej klatki i wg niego przesuwac obiekt o wyliczona ilosc pikseli.
Może tak robić, tylko musi przesuwać obiekt co określony czas. :)

Offline SirMike

  • Użytkownik
    • SirMike's Techblog

# Maj 26, 2007, 12:04:27
Tak nie mozesz robic. Musisz w animacji uwzglednic czas, ktory uplynal od ostatniej klatki i wg niego przesuwac obiekt o wyliczona ilosc pikseli.
Może tak robić, tylko musi przesuwać obiekt co określony czas. :)

No tak, a jak inaczej? :)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Maj 26, 2007, 13:17:51
No tak, a jak inaczej? :)
Są dwie metody:
- przesuwać co zmienny czas (np. co klatkę) o odpowiednią odległośc,
- przesuwać o stałą odległość, ale dbać by operację tą wykonywać z tą samą częstotliwością (proste, jeżeli możesz z góry założyć ile będzie renderowanych klatek na sekundę)

bies

  • Gość
# Maj 26, 2007, 13:31:33
No tak, a jak inaczej? :)
Są dwie metody:
- przesuwać co zmienny czas (np. co klatkę) o odpowiednią odległośc,
- przesuwać o stałą odległość, ale dbać by operację tą wykonywać z tą samą częstotliwością (proste, jeżeli możesz z góry założyć ile będzie renderowanych klatek na sekundę)
A ponieważ można, co najwyżej, założyć, że klatek będzie od 0 do max. To jest jedna metoda. ;)

Offline nameczanin

  • Użytkownik
    • devlog

# Maj 26, 2007, 13:51:01
ale chyba nie o piksele a jednostki floatowe w przestrzeni OGL-a ;f

EDIT down Krzyskowi: autor topicu pisal, ze napisal sobie gre w OpenGL-u i WinAPI.
« Ostatnia zmiana: Maj 26, 2007, 17:19:20 wysłana przez nameczanin »

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Maj 26, 2007, 14:06:52
Cytuj
A ponieważ można, co najwyżej, założyć, że klatek będzie od 0 do max. To jest jedna metoda. ;)
Niekoniecznie:
- na niektórych platformach można przyjąć takie założenie bez problemu: 8-bitowce, DOS (tak robił na przykład Doom), a może nawet XBox,
- jak ktoś się uprze, może wymusić odświerzanie, jakie mu się podoba (60Hz powinno chodzić praktycznie wszędzie),
- w ostateczności można sprawdzać czas i wywoływać logikę pomiędzy klatkami odpowiednią liczbę razy (problem tylko, ze wtedy przy niedobranym odświerzaniu gra będzie "rwała")

Cytuj
ale chyba nie o piksele a jednostki floatowe w przestrzeni OGL-a ;f
A kto tu mówi o OpenGL'u? Poza tym OpenGL też przecież renderuje piksele i nic nie stoi na przeszkodzie, aby odległości liczyć właśnie w nich. :)

bies

  • Gość
# Maj 26, 2007, 14:14:19
Cytuj
A ponieważ można, co najwyżej, założyć, że klatek będzie od 0 do max. To jest jedna metoda. ;)
Niekoniecznie:
- na niektórych platformach można przyjąć takie założenie bez problemu: 8-bitowce, DOS (tak robił na przykład Doom), a może nawet XBox,
- jak ktoś się uprze, może wymusić odświerzanie, jakie mu się podoba (60Hz powinno chodzić praktycznie wszędzie),
- w ostateczności można sprawdzać czas i wywoływać logikę pomiędzy klatkami odpowiednią liczbę razy (problem tylko, ze wtedy przy niedobranym odświerzaniu gra będzie "rwała")
Naprawdę możesz zapewnić, że FPS nie spadnie poniżej pewnej prędkości. Na ustalonym sprzęcie może. Ale pomyśl o skali testów dla takiego założenia.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Maj 26, 2007, 14:22:06
Cytuj
Naprawdę możesz zapewnić, że FPS nie spadnie poniżej pewnej prędkości. Na ustalonym sprzęcie może. Ale pomyśl o skali testów dla takiego założenia.
Na 8-bitowcach wszystkie gry tak działały, pod DOS'em najprawdopodobniej też (jak mówiłem, na pewno tak działał Doom, ale myślę, że także większość platformówek). A jeżeli FPS spadnie, to można zawsze uruchomić logikę kilkukrotnie lub pozwolić grze się przyciąć. :)

Offline Netrix

  • Redaktor
    • Netrix’s devBlog

# Maj 26, 2007, 14:34:16
Naprawdę możesz zapewnić, że FPS nie spadnie poniżej pewnej prędkości. Na ustalonym sprzęcie może. Ale pomyśl o skali testów dla takiego założenia.

No niby tak, ale gra nie może chodzić za szybko, więc trzeba wrzucić ograniczenie, jeśli coś się robi za szybko, to poczekać, aż dojdzie do końca z góry ustalonego czasu i przejść dalej,.

Offline SirMike

  • Użytkownik
    • SirMike's Techblog

# Maj 26, 2007, 14:42:27
Są dwie metody:
- przesuwać co zmienny czas (np. co klatkę) o odpowiednią odległośc,

Przeciez o tym wlasnie pisalem :)

Cytuj
- przesuwać o stałą odległość, ale dbać by operację tą wykonywać z tą samą częstotliwością (proste, jeżeli możesz z góry założyć ile będzie renderowanych klatek na sekundę)

Tu juz zaczynamy spierac sie o szczegoly, ktore zalozycielowi tematu nic nie dadza. Pozwol, ze nie bede kontynuowal dyskusji ;)