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

[SFML]Rozmazany sprajt.

Ostatnio zmodyfikowano 2014-02-08 15:03
Autor Wiadomość
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.
C/C++
#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
P-104219
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 );
P-104220
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ć ?
P-104222
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:
C/C++
#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;
}
P-104229
Parapet
Temat założony przez niniejszego użytkownika
» 2014-02-08 15:03:56
@MrPoxipol Dziękuje Ci bardzo za pomoc :)

Temat zamykam.
P-104244
« 1 »
  Strona 1 z 1