Problemy sfml i grafika

0

Witajcie, mam dwa problemy i nie potrafię ich rozwiązać. Piszę grę 2D w c++, używając biblioteki sfml.

Pierwsza sprawa: Mapa gry ma wymiary ok. 3400x3400, widok view ma 2500x2000. Rysuję w oknie dużo sprajtów i na każdym sprawdzam czy najadę na niego myszką. Zaś niezależnie gdzie mam ustawiony widok to mysz daje mi koordynaty z pozycji na ekranie, ale działa to na sprajty tylko z lewego górnego rogu (mniej więcej obszar 600x600). Przykładowo, mam widok na prawy dolny róg i myszkę w rogu to odpali to sprajta na prawym dolnym rogu tego obszaru w lewym górnym.

Druga sprawa: Obrazki ze sobą graniczą i one nie są kwadratowe, zaś do kwadratu są dopełnione przeźroczystością. I jeżeli najadę na jakiś sprajt, to mogę odpalić graniczące ze wzgl. na przezroczyste dopełnienie. Da się zrobić, żeby obrazki nie były kwadratowe np. koło zapisane jako koło nawet bez przeźroczystości. Do sprajtów ładuję obrazy z plików.

Jeżeli nie wyjaśniłem jasno problemu to mogę nagrać filmik o co chodzi. Proszę o pomoc.

1

Ad 1: transformuj koordynaty myszki z relatywnych na absolutne. Czyli w skrócie: do prawidłowego sprawdzenia pozycji kursora musisz uwzględnić położenie kamery.

Ad 2: obrazy jako-tako muszą być prostokątami; w Twoim przypadku najlepiej byłoby tworzyć oteksturowane wielokąty (które już mogą reprezentować dowolny kształt) i sprawdzać czy kursor znajduje się wewnątrz nich.

0

Dzięki za odpowiedź. co do punktu 2, nie jestem w stanie narysować samemu konturów używając rectangleshape (ok. 30 pkt bym robił na każdy obrazek, a tych jest 353). Da radę tak to zrobić, żeby kontury same wg. obrazka (bez przezroczystego) się zrobiły?

1

Z całą pewnością można to zautomatyzować - nie jestem pewien czy jest coś wbudowane w SFML (prawdopodobnie nie), lecz sam algorytm nie będzie niesłychanie skomplikowany.
Najlepiej, jak zwykle, rozrysuj sobie na kartce co i jak ;-)

0

Dzięki, nie chciałbym porzucać tego projektu, trochę mi dodałeś pomysłu i optymizmu :)

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