Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.0] Jednakowe tempo gry

Ostatnio zmodyfikowano 2012-09-24 19:29
Autor Wiadomość
hincu
» 2012-09-24 17:52:43
tak, wtedy bedziesz mial stala liczbe fps :P, zawsze mozesz tez zrobic tak jak na silniku half life ze to gracz wybiera sobie ile chce miec fps :P aczkolwiek jesli nie umiesz korzystac z timerow to nie polecam takiego rozwiazania poniewaz bedzie to 'wbudowany' hack do przyspieszenia dzialania aplikacji :P
P-65479
m4tx
» 2012-09-24 18:16:41
Czyli jeśli ustawię SetFramerateLimit to nie muszę się martwic o to, żeby gra chodziła na wszystkich komputerach tak samo?
Musisz. Jak ustawisz framerate limit to:
  • On nie będzie działał dobrze, jeśli gra będzie na danym sprzęcie "przycinać"
  • Nie będziesz mógł zmienić limitu
  • VSynca nie zrobisz, a on jest podstawą w grach
Najlepiej jest po prostu mnożyć np. przesunięcie obiektów (czy inne obliczenia wykonywane w zależności od czasu) przez delta time (czas od ostatniej ramki). Nie musisz się wtedy martwić praktycznie o nic...
P-65480
AlfaLeporis
» 2012-09-24 19:11:04
Ok, czyli muszę sprostować kilka rzeczy... i odpowiedzieć na Wasze pytania na temat kursu :)

   wojownik266:  "Czekam z niecierpliwością na pierwszą lekcje tego kursu. A tak przy okazji to z ilu lekcji będzie się on składał? Pytam z czystej ciekawości."

Aktualnie przygotowane są 4 dość długie lekcje: instalacja biblioteki w środowisku MSVC++ 2010, obsługa urządzeń wejściowych i wydarzeń (eventy), tworzenie okna, wyświetlanie tekstu i obrazków oraz wszelkie transformacje związane z nimi, obsługa czasu, pętla stałokrokowa i operacje na widoku (sf::View). Każda linijka jest dokładnie wytłumaczona więc mam nadzieję że nie będzie problemu ze zrozumieniem kursu. Planowane są dalsze części.

    anonim: "Odnośnie kursu. Czy SFML2 różni się wiele od 1.6 (poza zmianą nazw funkcji)?"

Tak, różni się nie tylko nazwami funkcji ale i np. dostępem do urządzeń wejścia, obsługą wydarzeń, klasą ładowania obrazków, zmianą wersji OpenGL'a z 1.1 na wyższą (czyli jednym słowem zastąpienie archaicznego glVertex nowszymi mechanizmami (poprawione)) co wiąże się z dużym wzrostem wydajności. To z takich głównych nowości.

    hincu

Ok, setFramerateLimit ustawisz na 60 i będzie ok. A co jak wartość FPS spadnie na np. 25? Gra zacznie wariować. Co do Twojego kodu to hmm, dziwne podejście. Aktualizować powinno się tylko logikę, a input i draw powinno się zostawić tak, aby jak najczęściej się wywoływały. Dlaczego? Jak ustawisz TIME_STEP na 0.03f uruchomisz grę z Twoim kodem, możesz mieć opóźnione reakcje na np. naciśnięcie klawisza. A jak będziesz chciał zatrzymać aktualizację logiki? Zatrzymasz też całą procedurę rysowania?
   
    anonim: "Czyli jeśli ustawię SetFramerateLimit to nie muszę się martwic o to, żeby gra chodziła na wszystkich komputerach tak samo?"

Nie, tak jak mówiłem, setFramerateLimit pozostawione same sobie nie załatwi problemu. Przynajmniej na tym wolniejszym sprzęcie, na szybszym jakoś by to pewnie działało.

    m4tx: "Najlepiej jest po prostu mnożyć np. przesunięcie obiektów (czy inne obliczenia wykonywane w zależności od czasu) przez delta time (czas od ostatniej ramki). Nie musisz się wtedy martwić praktycznie o nic..."

Nie, nie jest najlepiej. Przede wszystkim jeżeli będziesz pisał takim sposobem swoją fizykę to życzę powodzenia... Jeżeli któryś czas deltaTime zrobił by się nagle wysoki, cała fizyka zwariowała by. Zresztą jest jeszcze inny plus korzystania z pętli stałokrokowej - można zaimplementować mechanizm cofania i przesuwania czasu w grze.
P-65481
ison
» 2012-09-24 19:17:48
czyli jednym słowem zastąpienie archaicznego glVertex na VBO
sfml 2 nie używa VBO
P-65482
AlfaLeporis
» 2012-09-24 19:29:12
Rzeczywiście, mój błąd. Nie wgłębiałem się w kod nowego SFML'a a gdzieś obiło mi się o uszy że korzysta z VBO. Wymazuję z pamięci :>
P-65483
1 « 2 »
Poprzednia strona Strona 2 z 2