kasiula03 Temat założony przez niniejszego użytkownika |
[SFML] Skalowalne menu » 2015-11-12 00:04:05 Witam, od dłuższego czasu zmagam się z pewnym problemem. Otóż chce zrobić skalowalne menu. Problem jest w tym, że po zmianie rozmiaru okna, nie da się już kliknąć w poszczególne opcje. Tutaj jest kod: http://wklej.to/QAtQ8
Szukałam już informacji na ten temat, niestety bez skutecznie. Z góry dziękuje za pomoc. |
|
michal11 |
» 2015-11-12 00:44:06 1. Wstawiaj kod na forum 2. Jeżeli nie zmieniasz rozmiaru okna to wszystko działa ? Czy jak powrócisz do poprzedniego rozmiaru to znowu działa ? 3. Z pobieżnej analizy kodu wydaje mi się, że dzieje się tak używasz nie tej funkcji Mouse::getPosition(); moim zdaniem pownnaś użyć static Vector2i sf::Mouse::getPosition(const Window &relativeTo) |
|
kasiula03 Temat założony przez niniejszego użytkownika |
» 2015-11-12 12:01:57 Jak nie zmieniam rozmiaru okna, to wszystko działa, a kiedy zmienię rozmiar i wrócę do poprzedniego, to też działa. Niestety Twój sposób nie podziałał, niestety funkcja getGlobalBounds().contains() działa mi tylko dla Vector2f, dla Vector2i już nie. |
|
Lora |
» 2015-11-12 12:05:26 To zrób rzutowanie. getGlobalBounds().contains(( sf::Vector2f ) sf::Mouse::getPosition( window ) );
|
|
kasiula03 Temat założony przez niniejszego użytkownika |
» 2015-11-12 15:49:57 Niestety nie podziałało, tak jakby ten getGlobalBounds stał w jednym wyznaczonym miejscu, ani się nie przesuwa ani nie skaluje.
Może spróbuje inaczej. Jak sprawdzić w jakiej pozycji jest mysz, ale nie względem okna? |
|
BadBullPL |
» 2015-11-12 17:23:55 Na początku pętli w argumencie getPosition podaj window i powinno działać. |
|
kasiula03 Temat założony przez niniejszego użytkownika |
» 2015-11-12 20:04:52 Niestety nie pomogło, już kiedyś próbowałam tak zrobić. |
|
michal11 |
» 2015-11-12 21:43:21 Dzieje się tak, ponieważ przy zmianie rozmiaru okna nie są ponownie obliczane współrzędne tekstu (i pewnie innych obiektów też). Musisz zrobić to ręcznie, i służy do tego funkcja mapCoordsToPixel(), jednak użycie jej jest dość "brzydkie" ja doszedłem do czegoś takiego: Vector2f pos( tekst[ i ].getGlobalBounds().left, tekst[ i ].getGlobalBounds().top ); Vector2f size( tekst[ i ].getGlobalBounds().width, tekst[ i ].getGlobalBounds().height ); FloatRect newRect( static_cast < Vector2f >( window.mapCoordsToPixel( pos ) ), static_cast < Vector2f >( window.mapCoordsToPixel( size ) ) );
if( newRect.contains( static_cast < Vector2f >( Mouse::getPosition( window ) ) ) )
i u mnie to działa, wstaw to w środek swojego fora i powinno być ok. Mam nadzieję, że ktoś znajdzie "ładniejsze" rozwiązanie. |
|
« 1 » 2 |