[SFML 2.1] Rozmazywanie sprajta podczas ruchu.
Ostatnio zmodyfikowano 2014-01-13 17:41
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: #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. |
|
kubawal |
» 2014-01-13 16:56:14 Zawsze na początku pętli czyść ekran. while( win.isOpen() ) { win.clear();
|
|
kratos19994 Temat założony przez niniejszego użytkownika |
» 2014-01-13 17:12:15 Wtedy ludzika w ogóle nie ma. |
|
kubawal |
» 2014-01-13 17:17:15 Bo okno.draw() i okno.display() powinno być w pętli głównej. |
|
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. |
|
pekfos |
» 2014-01-13 17:28:42 okno.clear(); okno.draw( asdf ); okno.display(); |
|
kratos19994 Temat założony przez niniejszego użytkownika |
» 2014-01-13 17:41:21 Dzięki już wszystko ładnie działa. Zamykam temat. |
|
« 1 » |