在主循环中(win.isopen(((我有4个if是:
#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();
}
}
如果它们在int main((中,它们都可以正常工作,但是我想将它们放在int main((的过程中,但是当我这样做时没有错误,但是精灵没有出现当我向上,向下,左和右键时移动。似乎有什么问题?
制作过程后的代码:
#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();
}
}
好吧,我在阅读自己的问题时自己发现了问题。
Vector2f movement( 0.f, 0.f ), viewMovement( 0.f, 0.f );
this(win.isopen(((是错误的,因为我已经在int main((之前写过它了
movement = Vector2f( 0.f, 0.f );
viewMovement = Vector2f( 0.f, 0.f );
使用此 ^它有效。
感谢所有甚至想回答我的人。