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
» 2015-11-12 22:04:45
Rozwiązanie faktycznie nie "najładniejsze", ale na razie jedyne działające z jakim się spotkałam także dziękuje!
Niestety nie mogę tego robić w pętli, bo ( z tego co rozumiem) "newRect" jest tylko dla jednego obiektu.
P-140048
michal11
» 2015-11-12 22:26:10
Tak, newRect jest dla jednego ale tego konkretnego który akurat sprawdzasz i dlatego to ma być w pętli, zamień:
C/C++
for( int i = 0; i < ile; i++ )
{
    if( tekst[ i ].getGlobalBounds().contains( mouse ) )
         tekst[ i ].setColor( Color::Cyan );
    else tekst[ i ].setColor( Color::White );
   
}
na:
C/C++
for( int i = 0; i < ile; i++ )
{
    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 ) ) ) )
         tekst[ i ].setColor( Color::Cyan );
    else tekst[ i ].setColor( Color::White );
   
}

i sprawdź czy będzie ok.
P-140049
kasiula03
Temat założony przez niniejszego użytkownika
» 2015-11-12 22:35:50
Jest ok, ale to jest tylko dla zmieniania koloru tekstu. Przed tym forem, jest pętla while, która sprawdza czy mysz nacisnęła na "przycisk" i chyba nie mogę tego zrobić za pomocą jednego newRecta.
P-140050
michal11
» 2015-11-12 23:20:27
Nie musisz sprawdzać czy naciśnięto przycisk myszy w pętli eventów.
C/C++
std::vector < GameState > vec; // to do deklaracji klasy

//...

vec.push_back( GameState::GAME ); // to
vec.push_back( GameState::END ); // i to do konstruktora

//......

for( int i = 0; i < ile; i++ )
{
    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 ) ) ) )
    {
        tekst[ i ].setColor( Color::Cyan );
        if( Mouse::isButtonPressed( Mouse::Left ) )
        {
            state = vec[ i ];
        }
    }
    else
    {
        tekst[ i ].setColor( Color::White );
    }
   
}

a i z tej pętli while wywala sprawdzanie myszy i zostaw tylko sprawdzanie zamykania okna.

Z drugiej strony jeżeli to jest tylko projekt na zajęcia to może warto zastanowić się nad zablokowaniem zmiany rozmiaru okna i mieć ten problem z głowy ?
P-140055
kasiula03
Temat założony przez niniejszego użytkownika
» 2015-11-12 23:51:24
W takim wypadku przerobie sprawdzanie naciśnięcia myszy, nie znałam tej opcji. Jeżeli znałbyś jakiś ciekawy kurs sfml'a to będę wdzięczna, za podlinkowanie :)

Istotnie jest to projekt na zajęcia, ale właśnie na potrzeby zajęć znacząco go umniejszam, ale generalnie chcę go potem trochę rozwinąć. Nurtował mnie ten problem i nie chciałam iść na skróty. Generalnie, to nie był mój główny kłopot, wstawiłam go tutaj, bo rozwiązanie mojego głównego problemu polega na tym samym.
A mianowicie nie mogłam sobie poradzić z tym, żeby wyświetlać na ekranie zegar posiadający przyciski przyśpieszenia czasu, który przesuwałby się razem z kamerą. Bo o ile samo przesuwanie razem z kamerą było proste, tak właśnie po przesunięciu nie było możliwości kliknąć w przyciski.
Dziękuje Michale za poświęcony czas, po dwóch dniach bezowocnych poszukiwań, w końcu ruszyłam naprzód.
P-140059
michal11
» 2015-11-13 00:26:05
Najlepszym kursem jest dokumentacja API, po tym jak już przerobisz toutorial ze strony sfml'a.
Dodatkowo może być pomocna strona ze wzorcami projektowymi wykorzystywanymi w grach, w szczególności polecam state, update method i ew. observer.
P-140062
1 « 2 »
Poprzednia strona Strona 2 z 2