带有 SFML 的 c++ 中的过程无法正常工作,移动算法



在主循环中(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 );

使用此 ^它有效。

感谢所有甚至想回答我的人。

最新更新