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

Jak poruszać obiektem w stronę w którą jest obrócony? SFML

Object Storage Arubacloud
0 głosów
212 wizyt
pytanie zadane 29 sierpnia 2019 w C i C++ przez Wiktor Panecki Użytkownik (920 p.)

Dzień dobry, szukając w internecie jakiegoś rozwiązania na to jak przesuwać obiekt w stronę w który jest obrócony spotkałem to:

X = 1*sin(sprite.getRotation());
Y = 1*cos(sprite.getRotation());
        
if(sf::Keyboard::isKeyPressed(sf::Keyboard::W)){
      sprite.move(X, Y);
}

if(sf::Keyboard::isKeyPressed(sf::Keyboard::A)){
      sprite.rotate(-1);
}

if(sf::Keyboard::isKeyPressed(sf::Keyboard::D)){
      sprite.rotate(1);
}

I kiedy spróbowałem z tego korzystać to mój obiekt świruje, znaczy jak na początku nacisnę "W" to działa dobrze, ale gdy nacisnę i puszczę "D" do obrotu, a potem "W" to przesuwa się w losową stronę jak tak zrobię jeszcze raz to znowu w inną, o co chodzi? Mam to w pętli window.IsOpen.

2 odpowiedzi

+1 głos
odpowiedź 29 sierpnia 2019 przez tangarr Mędrzec (154,860 p.)
wybrane 29 sierpnia 2019 przez Wiktor Panecki
 
Najlepsza
Wydaje mi się, że masz X i Y odwrotnie policzone.
Spójrz tutaj: https://pl.wikipedia.org/wiki/Funkcje_trygonometryczne#Definicja_za_pomoc%C4%85_k%C4%85ta
komentarz 29 sierpnia 2019 przez Wiktor Panecki Użytkownik (920 p.)
A mógłyś mi powiedzieć coś więcej? Tego w ósmej klasie nie miałem :(
1
komentarz 29 sierpnia 2019 przez tangarr Mędrzec (154,860 p.)
Może obejrzyj sobie jakiś wykład na youtube (np ten https://www.youtube.com/watch?v=c2UlPn2WM5c)
Ten film omawia tylko funkcje trygonometryczne na trójkącie, ale to działa dla dowolnego punktu na płaszczyźnie (patrz link wikipedii, który ci dałem).
W skrócie: znasz kąt obrotu i odległość o jaką chcesz się przesunąć (przeciwprostokątna) i chcesz obliczyć współrzędne wektora przesunięcia (przyprostokątne). Musisz użyć do tego funkcji sinus i cosinus.
+1 głos
odpowiedź 29 sierpnia 2019 przez Patrycjerz Mędrzec (192,320 p.)

Po pierwsze, pomyliłeś wzory na współrzędne wektora przemieszczenia: X wyliczysz z cosinusa, zaś Y z sinusa (znając definicję tych funkcji można łatwo dojść do takiego wniosku).

Po drugie, jeśli nie ograniczysz szybkości wykonywania pętli programu, to obrót obiektu może być za szybki, co uniemożliwi poprawne sterowanie. Warto zainteresować się metodą sf::RenderWindow::setFramerateLimit.

Po trzecie, lepiej stworzyć jakieś zmienne definiujące kąt obrotu oraz prędkość na jeden obieg pętli głównej (lub nawet lepiej, uzależniając te wartości od czasu).

komentarz 29 sierpnia 2019 przez Wiktor Panecki Użytkownik (920 p.)
Jeżeli Cię dobrze zrozumialem to wystarczy zamienić X na Y i odwrotnie. A co do klatek to mam ustawione na 30.

Podobne pytania

0 głosów
0 odpowiedzi 85 wizyt
pytanie zadane 29 grudnia 2016 w C i C++ przez BIREXD Obywatel (1,180 p.)
0 głosów
0 odpowiedzi 520 wizyt
pytanie zadane 29 marca 2017 w C i C++ przez sofnir Gaduła (4,690 p.)
0 głosów
1 odpowiedź 124 wizyt
pytanie zadane 20 sierpnia 2020 w C i C++ przez tonn204 Mądrala (7,440 p.)

92,620 zapytań

141,471 odpowiedzi

319,803 komentarzy

62,003 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!

...