Rozbieżność Vector2i z Vector2f sfml

0

Programuje małą grę w sfml. Problem pojawił się kiedy zacząłem tworzyć menu główne, zrobiłem funkcję do sprawdzania kolizji czy myszka kliknęła na przycisk i po debugu zauważyłem że metoda sf::getPosition(Window) dawała dziwne rezultaty. Kiedy kliknąłem na przycisk o pozycji (-150, -200) wyrzuciło x=0 a jako y różne liczby. Kiedy zacząłem drążyć temat przeprowadziłem eksperyment, zauważyłem że myszka operuje na Vector2i a sprit-y na Vector2f, ustawiłem pozycję myszki na Vector2i(0,0) i pozycję randomowego sprite-a na Vector2f(0,0) i oba dały zupełnie inny punk w oknie programu, jak to wytłumaczyć? (Jestem nowy w sfml i gdyby ktoś dał wskazówkę jak porównać pozycję myszki i sprite-a bo u mnie nijak dają się porównać)

1

może problem wynika z błędnego porównywania float+float float+int
na początek https://floating-point-gui.de/errors/comparison/

0

Raczej nie to. Problem najprawdopodobniej wynika ze sposobu odczytywania pozycji myszki a obiektów w grze, pozycja obiektów jest liczona od skali w programie, a myszka jest liczona od lewego, górnego rogu okna. Potwierdziły to moje eksperymenty. Nie wiem tylko jak porównać pozycję myszy z pozycją obiektów w grze.

0

@karol1165: musisz wiedzieć w jakim układzie współrzędnych jesteś , a potem tylko przeliczyć z jednego okładu współrzędnych na drugi
najczęściej w takim przypadku pomocne są słowa kluczowe: matrix, inverse matrix
ale może biblioteka ma jakąś własną filozofię

0
  1. Pokaż kod.
  2. Do menu polecam imgui.
0

Opis problem jest mało konkretny:

karol1165 napisał(a):
  • sf::getPosition(Window) dawała dziwne rezultaty. Kiedy kliknąłem na przycisk o pozycji (-150, -200) wyrzuciło x=0 a jako y różne liczby.
  • Vector2i a sprit-y na Vector2f, ustawiłem pozycję myszki na Vector2i(0,0) i pozycję randomowego sprite-a na Vector2f(0,0) i oba dały zupełnie inny punk w oknie programu

Używasz skalowania koordynatów? Zaokrąglanie flotat do int jest w stronę zera, więc dziwne zachowanie w okolicy zera jest zrozumiałe.
Odróżniasz koordynaty pikseli ekranu, od koordynatów widoku?

Też niepokoi mnie tekst:

Kiedy kliknąłem na przycisk o pozycji (-150, -200)

Nie korzystałem z sfml, ale zwykle koordynaty lokalne przecisku są tak dobrane, że pozycja (0, 0) to lewy górny róg, a prawy dolny to jakieś współrzędne o dodatnich wartościach.
Ergo te ujemne wartości, sugerują kliknięcie poza przyciskiem (powyżej i na lewo), więc czemu obsługujesz to zdarzenie?

0

@MarekR22: Problem jest już rozwiązany. sf::Vector2i opisuje współrzędne, gdzie 0, 0 to lewy górny róg ekranu, sf::Vector2f opisuje współrzędne, gdzie 0, 0 to środek ekranu. Różni się punkt zaczepienia, więc wartości dla tego samego punktu są inne. Co do przycisku, gdy ustawiłem go na Vector2f(-150, -200) był widoczny na ekranie, bo 0,0 to środek (ustawiałem też niestandardowe punkty zaczepienia), więc wszystko działało prawidłowo. Główny problem polegał na tym, że informacje i pozycji myszy były podawane w wersji gdzie 0,0 to róg ekranu, a pozycje spriteów były podawane w wersji gdzie 0,0 to środek okna. Aby rozwiązać problem wystarczyło użyć funkcji sfml mappixeltocoords().

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