In main loop while( win.isOpen() ) i have 4 if's:
#include<SFML/Graphics.hpp>
using namespace sf;
int main()
{
RenderWindow win( VideoMode( 1280, 1024, 32 ), "abc" );
View view( FloatRect( 0, 0, 320, 256 ) );
Sprite player;
Texture player_t;
Image player_i;
player_i.loadFromFile( "sprite1.png" );
player_t.loadFromImage( player_i );
player.setTexture( player_t );
win.setView( view );
float speed = 80.f;
Clock frameClock;
while( win.isOpen() )
{
Event event;
while( win.pollEvent( event ) )
{
if( event.type == Event::Closed )
win.close();
}
Time frameTime = frameClock.restart();
Vector2f movement( 0.f, 0.f ), viewMovement( 0.f, 0.f );
if( Keyboard::isKeyPressed( Keyboard::Up ) )
{
if( player.getPosition().y >= 0)
movement.y -= speed;
if( player.getPosition().y + 25 <= view.getCenter().y - 50 && view.getCenter().y - 128 >= 0 )
viewMovement.y -= speed;
}
if( Keyboard::isKeyPressed( Keyboard::Down ) )
{
if( player.getPosition().y + 100 <= 1024 )
movement.y += speed;
if( player.getPosition().y + 25 >= view.getCenter().y + 50 && view.getCenter().y + 128 <= 1024 )
viewMovement.y += speed;
}
if( Keyboard::isKeyPressed( Keyboard::Left ) )
{
if( player.getPosition().x >= 0)
movement.x -= speed;
if( player.getPosition().x + 15 <= view.getCenter().x - 82 && view.getCenter().x - 160 >= 0 )
viewMovement.x -= speed;
}
if( Keyboard::isKeyPressed( Keyboard::Right ) )
{
if( player.getPosition().x + 100 <= 1280)
movement.x += speed;
if( player.getPosition().x + 15 >= view.getCenter().x + 82 && view.getCenter().x + 160 <= 1280 )
viewMovement.x += speed;
}
player.move( movement * frameTime.asSeconds() );
view.move( viewMovement * frameTime.asSeconds() );
win.setView( view );
win.clear();
win.draw( player );
win.display();
}
}
If they are in int main() they work fine, but I'd like to put them in a procedure out of int main(), but when i do that no error comes up during compilation, but the sprite does not move when i press Up, Down, Left and Right keys. What seems to be the problem?
Here's code after making procedures:
#include<SFML/Graphics.hpp>
using namespace sf;
RenderWindow win( VideoMode( 1280, 1024, 32 ), "abc" );
View view( FloatRect( 0, 0, 320, 256 ) );
Sprite player;
Vector2f movement( 0.f, 0.f ), viewMovement( 0.f, 0.f );
float speed = 80.f;
void movementOfPlayer()
{
if( Keyboard::isKeyPressed( Keyboard::Up ) )
{
if( player.getPosition().y >= 0)
movement.y -= speed;
if( player.getPosition().y + 25 <= view.getCenter().y - 50 && view.getCenter().y - 128 >= 0 )
viewMovement.y -= speed;
}
if( Keyboard::isKeyPressed( Keyboard::Down ) )
{
if( player.getPosition().y + 100 <= 1024 )
movement.y += speed;
if( player.getPosition().y + 25 >= view.getCenter().y + 50 && view.getCenter().y + 128 <= 1024 )
viewMovement.y += speed;
}
if( Keyboard::isKeyPressed( Keyboard::Left ) )
{
if( player.getPosition().x >= 0)
movement.x -= speed;
if( player.getPosition().x + 15 <= view.getCenter().x - 82 && view.getCenter().x - 160 >= 0 )
viewMovement.x -= speed;
}
if( Keyboard::isKeyPressed( Keyboard::Right ) )
{
if( player.getPosition().x + 100 <= 1280)
movement.x += speed;
if( player.getPosition().x + 15 >= view.getCenter().x + 82 && view.getCenter().x + 160 <= 1280 )
viewMovement.x += speed;
}
}
int main()
{
Texture player_t;
Image player_i;
player_i.loadFromFile( "sprite1.png" );
player_t.loadFromImage( player_i );
player.setTexture( player_t );
win.setView( view );
Clock frameClock;
while( win.isOpen() )
{
Event event;
while( win.pollEvent( event ) )
{
if( event.type == Event::Closed )
win.close();
}
Time frameTime = frameClock.restart();
Vector2f movement( 0.f, 0.f ), viewMovement( 0.f, 0.f );
movementOfPlayer();
player.move( movement * frameTime.asSeconds() );
view.move( viewMovement * frameTime.asSeconds() );
win.setView( view );
win.clear();
win.draw( player );
win.display();
}
}