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

[SFML 2.1] Rozmazywanie sprajta podczas ruchu.

Ostatnio zmodyfikowano 2014-01-13 17:41
Autor Wiadomość
kratos19994
Temat założony przez niniejszego użytkownika
[SFML 2.1] Rozmazywanie sprajta podczas ruchu.
» 2014-01-13 16:43:09
Witam. Napisałem sobie ostatnio w SFML-u program w którym za pomocą strzałem rusza się ludzikiem. Oto kod:
C/C++
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>

int main()
{
    sf::RenderWindow okno( sf::VideoMode( 1920, 1080, 32 ), "Ruszanie ludzikiem" );
    sf::Texture tekstura;
    tekstura.loadFromFile( "ludek.png" );
    sf::Sprite sprajt;
    sprajt.setTexture( tekstura );
    sf::Event zdarzenie;
    int sprajt_x = 0;
    int sprajt_y = 0;
   
    while( okno.isOpen() )
    {
        while( okno.pollEvent( zdarzenie ) )
        {
            if( zdarzenie.type == sf::Event::Closed )
            {
                okno.close();
            }
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Down )
            {
                okno.clear();
                sprajt.move( 0, 10 );
                sprajt_x += 10;
                if( sprajt_x > 1080 )
                {
                    sprajt.setPosition( sprajt_y, 0 );
                    sprajt_x = 0;
                }
            }
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Up )
            {
                okno.clear();
                sprajt.move( 0, - 10 );
                sprajt_x -= 10;
                if( sprajt_x < 0 )
                {
                    sprajt.setPosition( sprajt_y, 1080 );
                    sprajt_x = 1080;
                }
                okno.clear();
            }
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Right )
            {
                okno.clear();
                sprajt.move( 10, 0 );
                sprajt_y += 10;
                if( sprajt_y > 1920 )
                {
                    sprajt.setPosition( 0, sprajt_x );
                    sprajt_y = 0;
                }
            }
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Left )
            {
                okno.clear();
                sprajt.move( - 10, 0 );
                sprajt_y -= 10;
                if( sprajt_y < 0 )
                {
                    sprajt.setPosition( 1920, sprajt_x );
                    sprajt_y = 1920;
                }
            }
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape )
            {
                okno.close();
            }
        }
        okno.display();
        okno.draw( sprajt );
    }
    return 0;
}
No i wszystko ładnie działa poza tym że gdy postać się porusza to zostają za nią różne ślady. Nie wiem dlaczego tak się dzieje ale zauważyłem że jak poruszam się w lewo to nie zostawia tych śladów ale jak zacznę przechodzić przez krawędź to zaczyna migać. No i co zrobić aby ludek przestał się psuć przy ruchu.
P-102079
kubawal
» 2014-01-13 16:56:14
Zawsze na początku pętli czyść ekran.
C/C++
while( win.isOpen() )
{
    win.clear();
    //...
P-102081
kratos19994
Temat założony przez niniejszego użytkownika
» 2014-01-13 17:12:15
Wtedy ludzika w ogóle nie ma.
P-102084
kubawal
» 2014-01-13 17:17:15
Bo
okno.draw()
 i
okno.display()
 powinno być w pętli głównej.
P-102085
kratos19994
Temat założony przez niniejszego użytkownika
» 2014-01-13 17:27:20
No właśnie są w głównej pętli programu.
P-102089
pekfos
» 2014-01-13 17:28:42
C/C++
okno.clear();
okno.draw( asdf );
okno.display();
P-102091
kratos19994
Temat założony przez niniejszego użytkownika
» 2014-01-13 17:41:21
Dzięki już wszystko ładnie działa. Zamykam temat.
P-102094
« 1 »
  Strona 1 z 1