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.
|
|
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ń: 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: 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. |
|
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.
|
|
michal11 |
» 2015-11-12 23:20:27 Nie musisz sprawdzać czy naciśnięto przycisk myszy w pętli eventów. std::vector < GameState > vec;
vec.push_back( GameState::GAME ); vec.push_back( GameState::END );
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 ? |
|
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. |
|
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. |
|
1 « 2 » |