• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

sfml c++ płynność przesuwania obiektów

Object Storage Arubacloud
0 głosów
774 wizyt
pytanie zadane 5 stycznia 2017 w C i C++ przez jankustosz1 Nałogowiec (35,880 p.)
Jak przesuwa się w jakimś programie obraz np. o 8 pixeli za każdym obiegiem pętli to nie wygląda to dobrze. Lepiej by wyglądało jakby pętla działała np. 4 x szybciej i przesuwało się tylko o 2 pixele. Jest wtedy płynny ruch.

Mam taki problem że to strasznie mi psuje wydajność i muszę wybrać płynność przesuwania albo działania.

Chyba nie powinno dojść do takiej sytuacji. Jak poradzić sobie z tym problemem?
komentarz 5 stycznia 2017 przez Avernis Nałogowiec (27,400 p.)
Pętla stałokrokowa

2 odpowiedzi

+1 głos
odpowiedź 5 stycznia 2017 przez Patrycjerz Mędrzec (192,320 p.)
wybrane 6 stycznia 2017 przez jankustosz1
 
Najlepsza

W jakim sensie program psuje ci wydajność?

Należy zauważyć, że ruch co osiem pikseli nie jest w żadnym razie tragiczny — w wirze akcji, gdzie wszystko się porusza, gdy gracz jest skupiony na niszczeniu kolejnego przeciwnika, czy skakaniu przez przeszkody, takie niuanse nie są szczególnie zauważalne. Zapewne wykonujesz testy w sterylnej scenerii, gdzie masz jednokolorowy kwadrat poruszający się po czarnym tle. Wtedy mimowolnie skupiasz się na tym braku płynności, ale to tylko przewrażliwienie.

Polecam używać metodę setFramerateLimit dla obiektu okna, np. dla wartości 100 — wtedy działanie twojej gry będzie uzależnione od czasu, nie zaś od wydajności komputera. Również sam program będzie wymagał mniejszego zapotrzebowania na zasoby sprzętowe.

komentarz 5 stycznia 2017 przez jankustosz1 Nałogowiec (35,880 p.)
Rzuca się to jednak w oczy. Jak to jest zrobione w jakiś znanych grach?

Korzystam z timerów i za szybko nigdy nic się nie wykona. Tylko problem taki że jak np 4 razy mniej czasu ustawię (żeby zamiast np co 4 sekundy co 1s zmieniał pozycje (to tylko przykład)) to wszystkie warunki, operowanie na bitmapach, wyświetlanie sprawia że komputer nie wyrabia z programem i widać tego efekty raz działa szybciej raz wolniej. Gdy porusza się o 8 pixeli to tego problemu nie mam ale przez to gorsza jakość.

 

Ps wcześniej źle napisałem. Nie chodziło mi o to że 4 razy szybciej wykona się pętla tylko że 4 razy częściej będzie resetował timera.
komentarz 6 stycznia 2017 przez Patrycjerz Mędrzec (192,320 p.)
Co sekundę? Wtedy twój program działałby z szybkością 1 FPS, a to przecież nie ma większego sensu.

Pokaż, z jakich timerów korzystasz. Wydaję mi się, że to właśnie one są powodem problemów. Jak mówiłem, metoda setFramerateLimit jest bardzo fajną i prostą opcją na zoptymalizowanie gry.
komentarz 6 stycznia 2017 przez Danthee Początkujący (260 p.)
edycja 6 stycznia 2017 przez Danthee

SetFramerateLimit niczego nie rozwiąże. Nawet jeśli jakimś cudem wstrzelisz się w odpowiednia wartość, na innym komputerze wszystko moze sie rozjeżdżać. 

Sam niedawno miałem podobny problem i najłatwiejszym i dającym dużą swobodę dostosowania rozwiązaniem jest petla akumulacyjna.

Podrzucam link: LINK

komentarz 6 stycznia 2017 przez jankustosz1 Nałogowiec (35,880 p.)
wiedziałem że się ktoś tego uczepi to tylko taki przykład podałem żeby było wiadomo o co mi chodzi.

SetFrameLimit jest dla wszystkiego czyli pętla wykona się 100 razy na sekunde bo przy wyświetlaniu będzie czekać.

Ale oczywiście każdy obiekt ma swoją indywidualną prędkość poruszania i setframelimit to inna bajka, choć dla optymalizacji mogę z niego skorzystać.
komentarz 6 stycznia 2017 przez Patrycjerz Mędrzec (192,320 p.)
Dlaczego niby będzie się rozjeżdżać? Owszem, przy komputerze nie nadążającym za ustawionym limitem klatek, gra będzie działać za wolno, ale można to łatwo obejść, wykorzystując pętlę akumulacyjną.

Głównym powodem wykorzystania powyższej metody jest uniknięcie cholendarnego wykorzystania podzespołów. Jeśli mamy niewymagającą grę, to nie ma sensu wykorzystywać nawet 15% czasu procesora, bo to jest zwykłe marnotrawienie zasobów — z setFramerateLimit ten czas spada praktycznie do zera.
komentarz 6 stycznia 2017 przez jankustosz1 Nałogowiec (35,880 p.)
Coś musiałem popieprzyć, poszukam błędu.

 

może głupie pytanie ale pierwszy raz słyszę.

Co to pętla akumulacyjna? Google nic nie wypluło.
komentarz 6 stycznia 2017 przez criss Mędrzec (172,590 p.)
+1 głos
odpowiedź 5 stycznia 2017 przez criss Mędrzec (172,590 p.)
sf::Clock clock;
sf::Sprite sprite;
sf::Vector2f vel{5.f, 4.f};

while(1)
{
   sprite.move(vel * clock.restart().asSeconds());
   // sprite porusza się {5, 4}px/s
}

Wygoogluj pętla stałokrokowa. Tutaj też było na ten temat kilka postów.

komentarz 6 stycznia 2017 przez jankustosz1 Nałogowiec (35,880 p.)
To jest chyba lepsze od timerów i patrzeniu czy wyszło za czas bo nie skacze nagle o 8 pixeli tylko z każdym obiegiem pętli to robi. Zamienię tamto na to.

Podobne pytania

0 głosów
1 odpowiedź 195 wizyt
pytanie zadane 31 marca 2018 w C i C++ przez miedziakk Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 377 wizyt
0 głosów
1 odpowiedź 387 wizyt
pytanie zadane 8 lipca 2018 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...