Raciawelli Temat założony przez niniejszego użytkownika |
[SFML 2.1] tworzenie minimapy » 2013-11-26 07:33:42 po okrojeniu zbędnych części mam coś takiego: #include <SFML/Graphics.hpp> int main() { sf::RenderWindow window( sf::VideoMode( 660, 660, 32 ), "grom w gre! 2" ); sf::View gameView( sf::Vector2f( 330, 330 ), sf::Vector2f( 660, 660 ) ); gameView.setViewport( sf::FloatRect( 0.f, 0.f, 1.f, 1.f ) ); sf::View minimapView( sf::Vector2f( 750, 750 ), sf::Vector2f( 1500, 1500 ) ); minimapView.setViewport( sf::FloatRect( 0.75f, 0.f, 0.25f, 0.25f ) ); sf::Texture tekstura2; tekstura2.loadFromFile( "trawka.png" ); sf::Sprite trawka; trawka.setTexture( tekstura2 ); int plansza[ 50 ][ 50 ]; for( int b = 0; b <= 49; b++ ) for( int a = 0; a <= 49; a++ ) plansza[ a ][ b ] = 0; for( int b = 0; b <= 49; b += 49 ) for( int a = 0; a <= 49; a++ ) plansza[ a ][ b ] = 1; for( int b = 0; b <= 49; b++ ) for( int a = 0; a <= 49; a += 49 ) plansza[ a ][ b ] = 1; while( window.isOpen() ) { window.clear( sf::Color() ); sf::Event event; while( window.pollEvent( event ) ) { if( event.type == sf::Event::Closed ) window.close(); } for( int b = 0; b <= 49; b++ ) for( int a = 0; a <= 49; a++ ) { if( plansza[ a ][ b ] == 1 ) { trawka.setPosition( a * 30, b * 30 ); window.draw( trawka ); } } window.setView( gameView ); window.setView( minimapView ); window.display(); sf::sleep( sf::milliseconds( 10 ) ); } return 0; } i program teoretycznie powinien rysować najpierw widok gry i na tym w prawym górnym rogu minimapę, ale niestety rysuje tylko mnimapę, lub jak zamienię window.setView( minimapView ); window.setView( gameView ); tylko widok gry... nie mam pojęcia dlaczego tak się dzieje ;/ |
|
maly |
» 2013-11-26 09:50:11 window.setView( gameView );
window.setView( minimapView );
|
|
polkom21 |
» 2013-11-26 12:24:45 Nie działa Ci ponieważ sf::RenderWindow może posiadać tyko jeden widok. Zrób to w ten sposób, że stwórz sobie sf::RenderTexture do którego przypisz widok minimapy bo z tego co widzę to taki zrobiłeś później przerzucisz to do sprite a resztę to już powinieneś wiedzieć jak. |
|
Raciawelli Temat założony przez niniejszego użytkownika |
» 2013-12-01 21:04:50 Ok, nadal nie wiem jak to zrobić. Pierwsze słyszałem o RanderTexture (w końcu sfml zacząłem 2 tygodnie temu) więc zajrzałem w dokumentację i poszperałem trochę po forach. wyszło mi coś takiego: #include <SFML/Graphics.hpp> int main() { sf::RenderWindow window( sf::VideoMode( 660, 660, 32 ), "grom w gre! 2" ); sf::RenderTexture texture; if( !texture.create( 500, 500 ) ) return - 1; sf::View gameView( sf::Vector2f( 330, 330 ), sf::Vector2f( 660, 660 ) ); gameView.setViewport( sf::FloatRect( 0.f, 0.f, 1.f, 1.f ) ); sf::View minimapView( sf::Vector2f( 750, 750 ), sf::Vector2f( 1500, 1500 ) ); minimapView.setViewport( sf::FloatRect( 0.75f, 0.f, 0.25f, 0.25f ) ); while( window.isOpen() ) { window.clear( sf::Color() ); texture.clear( sf::Color::Blue ); texture.setView( minimapView ); texture.display(); sf::Sprite sprite( texture.getTexture() ); window.setView( gameView ); window.draw( sprite ); window.display(); } return 0; } komentarze przedstawiają jak ja rozumiem co się po kolei dzieje. Niestety nie dostaję oczekiwanego efektu, a jedynie niebieski prostokąt. Z tego wnioskuję, że mi się widok minimapy nie chce do tekstury załadować. I nie mam pojęcia dlaczego. Nie obsługuje view? Powinienem użyć innej funkcji? |
|
DejaVu |
» 2013-12-04 22:06:45 http://www.sfml-dev.org/tutorials/2.0/graphics-draw.phpJeżeli dobrze rozumiem to z tutoriala, który podałem wynika, że: sf::RenderTexture minimapa; if( !minimapa.create( 500, 500 ) ) { }
minimapa.clear();
minimapa.display();
sf::Sprite sprite( minimapa.getTexture() );
window.draw( sprite );
|
|
« 1 » |