[SFML 2.0] Jednakowe tempo gry
Ostatnio zmodyfikowano 2012-09-24 19:29
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 |
|
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: 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... |
|
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. |
|
ison |
» 2012-09-24 19:17:48 czyli jednym słowem zastąpienie archaicznego glVertex na VBO
|
sfml 2 nie używa VBO |
|
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 :> |
|
1 « 2 » |