Dzień dobry, pisze sobie własne rozszerzenie do SFML i natknąłem nie na problem który nie ma żadnej przyczyny. Nie dostaję żadnych błędów ani ostrzeżeń po porostu linijki odpowiedzialne za ustawianie sprite nie zostają wykonane. Gdy sprite dotyka górnej, prawej i lewej strony obiektu z którym ma kolidować to jako pozycja wyświetla się 200 - tylko w bottom'ie dobrze pokazuje pozycje. Jeżeli wyjmę to z funkcji i wrzucę do main wtedy normalnie działa. Za cholerę nie wiem co może być nie tak.
0
3
Z tego co widzę, zarówno Collision::Distance()
jak i Collision::Square()
operują na kopii obiektów sf::Sprite
.
Jeśli więc chcesz, by te metody modyfikowały wrzucane tam obiekty, to przekazuj ich wskaźnik, lub jako referencję.
void Collision::Square(sf::Sprite& spriteOne, sf::Sprite& spriteTwo, const float range)
To by też wyjaśniało, dlaczego:
Jeżeli wyjmę to z funkcji i wrzucę do main wtedy normalnie działa.
Dodatkowo, na przyszłość:
- Postaraj się lepiej nazywać meody - gdybym chciał teraz wykorzystać Twój kod, to nie mam pojęcia co ten kod robi.
Metoda o nazwieSquare()
nagle zmienia mi pozycję Sprite'a? Trudniej jest też Ci pomóc, bo trudniej jest zrozumieć Twój kod. - Wykorzystanie tego, co tworzysz (a w README piszesz, że tworzysz to by komuś mogło się przydać) może być niewygodne, bo:
trzeba będzie pobrać od Ciebie zarówno kolejną bibliotekę i ją linkować, jak i pobrać plik nagłówkowy
wykorzystujesz#include <SFML/Graphics.hpp>
, gdzie includowana ścieżka niekoniecznie musi pokrywać się z czyjąś konfiguracją projektu.
0
@Bartosz36: Na razie robiłem to z myślą o MacOS. Problem rozwiązała referencja. Wydaje mi się że kod Collision.Square();
wiele używającemu tłumaczy.