R0ut4 Temat założony przez niniejszego użytkownika |
[SFML] Kamera spłaszcza mapę i gracza » 2021-04-21 00:25:44 Yo, dawno mnie tu nie było XD Przechodząc do meritum: mam załadowaną mapę kafelkową z poradnika z oficjalnej strony sfml, posiadam sprite gracza i kiedy chcę "włączyć" kamerę (window.setView(kamera);) to wszystko co sie wyświetla spłaszcza się. To znaczy z wstępnej wielkości 100x100 pixel (kafelek mapy) staje się 100x50 pixel. Poniżej cały kod. (Pekfos ufam ci XD) #include <SFML/Window.hpp> #include <SFML/Graphics.hpp>
enum Stan { Menu, Game, Eq };
int main() { sf::RenderWindow window( sf::VideoMode( 1280, 720 ), "Game" ); window.setFramerateLimit( 60 ); sf::Texture player; sf::Texture water; sf::Texture grass; player.loadFromFile( "player.png" ); water.loadFromFile( "water.png" ); grass.loadFromFile( "grass.png" ); sf::Sprite spPlayer( player ); sf::Sprite spWater( water ); sf::Sprite spGrass( grass ); spPlayer.setOrigin( 25.f, 25.f ); spPlayer.setPosition( 640, 360 ); sf::View kamera; kamera.setCenter( spPlayer.getPosition() ); Stan stan; sf::Event e; while( window.isOpen() ) { while( window.pollEvent( e ) ) { if( e.type == sf::Event::Closed ) { window.close(); } } switch( stan ) { case Menu: { if( sf::Keyboard::isKeyPressed( sf::Keyboard::Enter ) ) { stan = Game; } } break; case Game: { if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) ) { spPlayer.move( 0, - 5 ); kamera.move( 0, - 5 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::S ) ) { spPlayer.move( 0, 5 ); kamera.move( 0, 5 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) ) { spPlayer.move( - 5, 0 ); kamera.move( - 5, 0 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) ) { spPlayer.move( 5, 0 ); kamera.move( 5, 0 ); } } break; case Eq: break; } window.clear(); switch( stan ) { case Menu: break; case Game: { const float tilesize = 100; int maptile[ 10 ][ 10 ] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; for( int row = 0; row < 10; row++ ) { for( int col = 0; col < 10; col++ ) { if( maptile[ row ][ col ] == 0 ) { spWater.setPosition( row * tilesize, col * tilesize ); window.draw( spWater ); } if( maptile[ row ][ col ] == 1 ) { spGrass.setPosition( row * tilesize, col * tilesize ); window.draw( spGrass ); } } } window.draw( spPlayer ); window.setView( kamera ); } break; case Eq: break; } window.display(); } }
|