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

SFML - clock, move

Object Storage Arubacloud
0 głosów
510 wizyt
pytanie zadane 6 listopada 2015 w C i C++ przez sofnir Gaduła (4,690 p.)

Hej, na jakiej zasadzie działa taki program:

        sf::Clock Clock;
	float moveSpeed = 10000.0f;

	while (Window.isOpen())
	{
		Clock.restart();

		sf::Event Event;
		while (Window.pollEvent(Event))
		{
			switch (Event.type)
			{
			case sf::Event::Closed:
				Window.close();
				break;
			}
		}

		if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
			rect.move(moveSpeed * Clock.getElapsedTime().asSeconds(), 0);
		else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
			rect.move(-moveSpeed * Clock.getElapsedTime().asSeconds(), 0);

rect - jest to obiekt klasy sf::Rectangleshape 

Bardzo proszę o wytłumaczenie, dlaczego używamy zegara? Podobno dlatego, żeby na każdym komputerze nasz obiekt poruszał się z jednakową prędkością? Nie wiem czy to o to chodzi? Ale na jakiej zasadzie to działa? I czy getElapsedTime() zwróci nam zawsze tą samą wartość? Chyba to niemożliwe. Jednym słowem, dlaczego zamiast ustawić na sztywno moveSpeed, to mnożymy go razy Clock.getElapsedTime()?

PS Uczę się z angielskiego kursu i dlatego nie zawsze wszystko rozumiem, chociaż autor wszystko tłumaczy.

2 odpowiedzi

+1 głos
odpowiedź 6 listopada 2015 przez Patrycjerz Mędrzec (192,320 p.)
wybrane 6 listopada 2015 przez sofnir
 
Najlepsza

Tak, bo wtedy uzależniasz ruch od czasu, a nie od szybkości działania komputera. Zasada działania polega na zastosowaniu, znanego ze szkoły, wzoru v = s / t, czyli s = v * t.

Nie, metoda getElapsedTime może zwracać różne wartości, zależnie od możliwości przerobowych sprzętu.

0 głosów
odpowiedź 18 sierpnia 2016 przez Weenter Użytkownik (830 p.)
Siemka, Tobie ten kod działa? Nie przyśpiesza tak czasami? Bo mi czasem dziwnie przyśpiesza przez 1/4 sekundy może. Tak jakby się teleportuje.
komentarz 3 września 2016 przez sofnir Gaduła (4,690 p.)
Hej, to już stary temat, właśnie przyspiesza, bo czas powinien być resetowany Clock.restart(); tego fragmentu nie było w poradniku, z którego się kiedyś uczyłem i stąd wynikało moje pytanie, ale niestety nie uzyskałem wówczas dobrej odpowiedzi.

Podobne pytania

0 głosów
1 odpowiedź 99 wizyt
pytanie zadane 2 maja 2019 w C i C++ przez Gryczny Początkujący (320 p.)
+1 głos
1 odpowiedź 233 wizyt
pytanie zadane 5 sierpnia 2020 w C i C++ przez NieMaJuzNazw Użytkownik (890 p.)
0 głosów
1 odpowiedź 189 wizyt
pytanie zadane 9 czerwca 2019 w C i C++ przez Padoski Użytkownik (990 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 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!

...