OczkoSX Temat założony przez niniejszego użytkownika |
[SFML] Minimapa z możliwością zoom'owania » 2014-03-18 21:11:07 Witam! To znowu ja ze swoimi problemami :D Mam następującą funkcję rysującą: void CMapa::rys_mape() { for( int i = 0; i < wys; i++ ) { for( int j = 0; j < szer; j++ ) { bloki.blok[ mapa_tab[ i ][ j ] ].setPosition( sf::Vector2f(( float ) j * bloki.blok_wymiar,( float ) i * bloki.blok_wymiar ) ); if( mapa_tab[ i ][ j ] != - 1 ) { if( czy_w_polu_View( i, j ) ) { APP.draw( bloki.blok[ mapa_tab[ i ][ j ] ] ); } } } } } Wywołuję ją za każdym obiegiem pętli, która służy za wyświetlanie obrazu. Tutaj jest pokazane tworzenie obiektów i innych obrazków podczas rysowania: sf::Texture bg_txt; bg_txt.loadFromFile( "bg.png" ); sf::Sprite bg( bg_txt ); bg.setOrigin( sf::Vector2f( bg.getGlobalBounds().width / 2, bg.getGlobalBounds().height / 2 ) );
view.setViewport( sf::FloatRect( 0.f, 0.f, 1.f, 1.f ) ); view.setSize( sf::Vector2f( APP.getSize() ) ); view.zoom( 10.0f ); bg.setScale( sf::Vector2f( view.getSize().x / bg.getGlobalBounds().width, view.getSize().y / bg.getGlobalBounds().height ) );
while( APP.isOpen() ) { if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) ) hero.move( 5, 0 ); if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) ) hero.move( - 5, 0 ); if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) ) hero.move( 0, - 5 ); if( sf::Keyboard::isKeyPressed( sf::Keyboard::S ) ) hero.move( 0, 5 ); if( sf::Keyboard::isKeyPressed( sf::Keyboard::Escape ) ) APP.close(); widok(); bg.setPosition( sf::Vector2f( view.getCenter() ) ); APP.draw( bg ); mapy[ wybr_mapa ].rys_mape(); APP.draw( hero ); APP.display(); APP.clear(); } }
void postac() { hero.setSize( sf::Vector2f( 400, 400 ) ); hero.setFillColor( sf::Color::Red ); }
void widok() { view.setCenter( sf::Vector2f( hero.getPosition().x +( hero.getGlobalBounds().width / 2 ), hero.getPosition().y +( hero.getGlobalBounds().height / 2 ) ) ); APP.setView( view ); }
View jest zawsze skierowany na gracza tak, aby był w centrum ekranu. Chciałbym umieścić w prawym górnym rogu minimapę. Nie miałbym problemów ze stworzeniem minimapy, która pobiera aktualny obraz wyświetlany przez View i odpowiednie scalowanie do jej rozmiarów, ale chciałbym aby w minimapie była CAŁA MAPA. Mapa by była rysowana do minimapy tylko raz, gdyż nie ulega ona zmianie. Chciałem to zrobić tak, że zapisuję całą mapę do Sprite, tworzę widok minimapy, w nim rysuję sprite. Z zoomowaniem też nie ma problemu, wystarczy minimapaView.zoom(). Chodzi mi teraz głównie o to jak zapisać całą mapę do sprite. Pozdrawiam |
|
OczkoSX Temat założony przez niniejszego użytkownika |
» 2014-03-18 22:08:24 Wpadłem na pomysł ze mogę zrobić RenderTexture, rysować do niego mapę, zrobić z niego sprite, potem osobny view i wyświetlić. Co o tym myślicie? |
|
waxx |
» 2014-03-19 14:23:41 Tak to się robi - albo możesz samemu narysować mapę do tekstury, albo wcześniej przygotować teksturę i ją wrzucić... Oczywiście do osobnego sf::View. |
|
OczkoSX Temat założony przez niniejszego użytkownika |
» 2014-03-19 16:23:14 Jak przechowywać w RenderTexture gigantyczną texture? Mam texture mapy o rozmiarch 200px * 100. Trochę sporo. Jak wpsrowadzę takie dane to nie działa.
PS. Jak dam warunek if nie można utworzyć to wyłącz, to wyłącza aplikacje. Nie ma takiej możliwości przechowywania takich textur? |
|
DejaVu |
» 2014-03-19 16:37:02 200x200x32bit = 156,25KB * 100 = 15,26MB
100 obrazków o takim rozmiarze wczytasz bez problemu.
1 obrazek zawierający o wymiarach (100*200)x200x32bit => nie wczytasz na Windows XP (na Windows 7 być może jak Ci się poszczęści to się uda). |
|
OczkoSX Temat założony przez niniejszego użytkownika |
» 2014-03-19 18:06:13 Żle zrozumiałeś. Mapa składa się z kafli o wymiarach 200x200, a ona sama ma 100x100 kafli
// Jak to można inaczej zrobić? Chciałbym aby była widoczna cała mapa na minimapie... No i ta możliwość zoomowania |
|
Wrzud |
» 2014-03-19 19:04:43 Zmniejsz rozmiar kafla. Potem renderuj i daj skale. W czym widzisz problem? |
|
OczkoSX Temat założony przez niniejszego użytkownika |
» 2014-03-19 19:29:01 Tylko ze użytkownik robi własną mapę... Nie mogę rozmiarów określić |
|
« 1 » 2 |