Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Skalowalne menu

Ostatnio zmodyfikowano 2015-11-13 00:26
Autor Wiadomość
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.
P-140012
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)
P-140015
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.
P-140024
Lora
» 2015-11-12 12:05:26
To zrób rzutowanie.
C/C++
getGlobalBounds().contains(( sf::Vector2f ) sf::Mouse::getPosition( window ) );
P-140025
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?
P-140029
BadBullPL
» 2015-11-12 17:23:55
Na początku pętli w argumencie getPosition podaj window i powinno działać.
P-140039
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ć.
P-140043
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:
C/C++
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.
P-140046
« 1 » 2
  Strona 1 z 2 Następna strona