Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Kamera spłaszcza mapę i gracza

Ostatnio zmodyfikowano 2021-04-21 05:24
Autor Wiadomość
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)
C/C++
#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();
           
}
        }
       
//WYDARZENIA
       
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;
       
}
       
//WYŚWIETLANIE
       
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 );
           
} //case Game
           
break;
       
case Eq:
           
           
break;
       
}
       
window.display();
   
}
}
P-178458
R0ut4
Temat założony przez niniejszego użytkownika
» 2021-04-21 05:24:41
Nie ważne XD

Ustawienie rozmiaru kamery na wartości takie jak ma okno zadziałało. W tym przypadku kamera.setSize(1280.f, 720.f);
Wystarczyło się przespać i na nowo na to spojrzeć XD
P-178459
« 1 »
  Strona 1 z 1