Wyrównanie FPS na Kilku komputerach

0

No więc zacząłem ostatnio się bawić SFML i mam pytanko co muszę umieścić w pętli głównej żeby wyrównać FPS na kilku komputerach? Wiem że jakoś trzeba umieścić timer ale nie wiem jak za to się zabrać. Z Góry dzięki za pomoc:)

0

Wpisz w Google - sfml frames per second - kilka pierwszych linków pomoże Ci ogarnąć temat kontroli czasu i ilości FPSów.

0
sf::Time zegar;
while (window.isOpen())
{
      //...logika
      while (!(zegar.getElapsedTime().asSeconds() > 1.f/60.f)) //
      {                                                                           //
                                                                                  // To dodałem
      }                                                                          //
      zegar.restart();                                                      //
      //... rysowanie
}
 

Dodałem kilka linijek kodu i niby to ogranicza FPS u mnie na komputerze ale dalej na innych komputerach gra chodzi znacznie wolniej... Nie wiem co robie nie tak ? Z góry dzięki za pomoc.:)

0

Zawsze możesz posłużyć się przygotowanym mechanizmem ograniczania ilości FPSów; W klasie Window jest metoda setFramerateLimit, dzięki której możesz ustawić maksymalną ilość klatek, przy czym przerwy pomiędzy klatkami nie musisz realizować ręcznie - w takim przypadku metoda display w sobie wywołuje sleep;

setFramerateLimit napisał(a)

Limit the framerate to a maximum fixed frequency.

If a limit is set, the window will use a small delay after each call to display() to ensure that the current frame lasted long enough to match the framerate limit. SFML will try to match the given limit as much as it can, but since it internally uses sf::sleep, whose precision depends on the underlying OS, the results may be a little unprecise as well (for example, you can get 65 FPS when requesting 60).

Parameterslimit
Framerate limit, in frames per seconds (use 0 to disable limit)

0

Samo zagadnienie jest nie jest trywialne już nawet bez próby synchronizacji pomiędzy wieloma komputerami.

Jedno z najlepszych i wciąż względnie prostych rozwiązań jest następujące: logikę uaktualniaj w stałych odstępach czasu niezależnie od szybkości działania procesora i karty graficznej. Wybierz taki odstęp czasowy, by nawet na najsłabszej konfiguracji, którą chcesz wspierać jeden krok logiki nie trwał dłużej niż owy odstęp. Może to być np. 10 razy na sekundę. Stały odstęp niesamowicie ułatwia masę rzeczy, w tym ową synchronizację, fizykę czy wykrywanie kolizji. Wyświetlanie grafiki jest trochę trudniejsze, bo w celu zachowania płynności musisz stosować interpolację (względem uaktualniania logiki, ale też synchronizacji). Plusem jest to, że nie musisz się kompletnie martwić o ilość faktycznych FPS, możesz rysować 10 klatek na sekundę, a na drugim sprzęcie 500.
O interpolacji w grach możesz przeczytać naprawdę sporo w internecie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1