[SFML]Rozmazany sprajt.
Ostatnio zmodyfikowano 2014-02-08 15:03
Parapet Temat założony przez niniejszego użytkownika |
[SFML]Rozmazany sprajt. » 2014-02-08 09:12:09 Witam ! Mam problem gdy chce ruszyć sprajtem zostają ślady(Zdjęcie niżej). Pytanie jak zrobić żeby te ślady nie zostawały. #include <SFML/Graphics.hpp> #include <iostream> int main() { sf::RenderWindow okno( sf::VideoMode( 840, 640, 32 ), "okno" ); sf::Event ev; sf::CircleShape sprajt( 50 ); sprajt.setFillColor( sf::Color::Green ); sprajt.setPosition( 420, 320 ); while( okno.isOpen() ) { while( okno.pollEvent( ev ) ) { if( ev.type == sf::Event::Closed ) okno.close(); } if( ev.type == sf::Event::KeyPressed ) { if( ev.key.code == sf::Keyboard::Right ) sprajt.move( 10, 0 ); if( ev.key.code == sf::Keyboard::Left ) sprajt.move( - 10, 0 ); if( ev.key.code == sf::Keyboard::Up ) sprajt.move( 0, - 10 ); if( ev.key.code == sf::Keyboard::Down ) sprajt.move( 0, 10 ); } okno.draw( sprajt ); okno.display(); } return 0; }
http://zapodaj.net/5ccaa888886ec.png.html |
|
GGG205 |
» 2014-02-08 09:34:13 Spróbuj nad rysowaniem obrazka dać to podwójne buforowanie(:D chyba tak to się zwie). okno.clear( Color::Black ); |
|
Parapet Temat założony przez niniejszego użytkownika |
» 2014-02-08 09:56:09 Niestety nie działa, na początku jest kółko lecz jeśli kliknę np. Right to już go nie widać. Macie inne pomysły jak to rozwiązać ? |
|
MrPoxipol |
» 2014-02-08 10:36:33 Znika, bo nie masz ustawionego limitu czasu klatki, ani pionowej synchronizacji. (Przyjrzyj się dokładnie to zobaczysz, że sprajt porusza się.) PS Jak chcesz robić taki ruch to nie możesz do sprawdzania klawiszy korzystać ze zdarzeń. W takich wypadkach zaleca się stosowanie: sf::Keyboard::isKeyPressed(key) i wyciągnięcie go poza pętle zdarzeń. Poprawny kod wygląda tak: #include <SFML/Graphics.hpp>
int main() { sf::RenderWindow okno( sf::VideoMode( 840, 640, 32 ), "okno" ); okno.setFramerateLimit( 60 ); sf::CircleShape sprajt( 50 ); sprajt.setFillColor( sf::Color::Green ); sprajt.setPosition( 420, 320 ); while( okno.isOpen() ) { sf::Event ev; while( okno.pollEvent( ev ) ) { if( ev.type == sf::Event::Closed ) okno.close(); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) sprajt.move( 10, 0 ); if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) sprajt.move( - 10, 0 ); if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) sprajt.move( 0, - 10 ); if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) ) sprajt.move( 0, 10 ); okno.clear(); okno.draw( sprajt ); okno.display(); } return 0; } |
|
Parapet Temat założony przez niniejszego użytkownika |
» 2014-02-08 15:03:56 @MrPoxipol Dziękuje Ci bardzo za pomoc :)
Temat zamykam. |
|
« 1 » |