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

SFML Migotanie ekranu

Ostatnio zmodyfikowano 2020-08-06 16:21
Autor Wiadomość
Yumox
Temat założony przez niniejszego użytkownika
SFML Migotanie ekranu
» 2020-08-05 13:49:38
Mam problem z prostym programem:
C/C++
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML 2.0 - http://cpp0x.pl" );
    while( oknoAplikacji.isOpen() )
    {
        sf::Event zdarzenie;
        while( oknoAplikacji.pollEvent( zdarzenie ) )
        {
            if( zdarzenie.type == sf::Event::Closed )
                 oknoAplikacji.close();
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape )
                 oknoAplikacji.clear( sf::Color( 100, 200, 200 ) );
           
        }
        oknoAplikacji.display();
    }
    return 0;
}
Po wciśnięciu Escape okno aplikacji zaczyna migotać naprzemiennie z koloru czarnego na niebieski, gdy wcisnę drugi raz Escape ekran zostaje niebieski (czyli oczekiwany efekt), dlaczego tak się dzieje?
P-177416
nanoant20
» 2020-08-05 14:34:08
Po wciśnięciu Escape okno aplikacji zaczyna migotać naprzemiennie z koloru czarnego na niebieski, gdy wcisnę drugi raz Escape ekran zostaje niebieski (czyli oczekiwany efekt), dlaczego tak się dzieje?
W zdarzeniach masz clear
oknoAplikacji.clear( sf::Color( 100, 200, 200 )
P-177417
Yumox
Temat założony przez niniejszego użytkownika
» 2020-08-05 15:52:52
Tak, mam clear ponieważ chciałem żeby po wciśnięciu Escape ekran był niebieski, a zamiast tego migocze.
P-177419
pekfos
» 2020-08-05 17:16:06
Ekran powinien być zawsze czyszczony. Jeśli wejście użytkownika ma zmienić kolor ekranu, to trzymaj ten kolor w zmiennej na podstawie której ekran jest czyszczony i tylko zmieniaj tą zmienną.
C/C++
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML 2.0 - http://cpp0x.pl" );
    sf::Color kolorTla = sf::Color::Black;
    while( oknoAplikacji.isOpen() )
    {
        sf::Event zdarzenie;
        while( oknoAplikacji.pollEvent( zdarzenie ) )
        {
            if( zdarzenie.type == sf::Event::Closed )
                 oknoAplikacji.close();
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape )
                 kolorTla = sf::Color( 100, 200, 200 );
           
        }
        oknoAplikacji.clear( kolorTla );
        oknoAplikacji.display();
    }
    return 0;
}
P-177421
Yumox
Temat założony przez niniejszego użytkownika
» 2020-08-05 22:56:24
Ok działa tak jak chciałem, ale nie rozumiem co powoduje migotanie, bo nie ma żadnej instrukcji która zmieniałaby kolor na czarny, więc po wejściu w zdarzenie (escape) powinien zostać ustawiony niebieski a właśnie wtedy zaczyna migać.
P-177426
pekfos
» 2020-08-06 16:15:47
To wynika z podwójnego buforowania. Są dwa "ekrany" do których rysujesz naprzemiennie, podczas gdy drugi jest aktualnie wyświetlany. Warunek oparty o zdarzenia wypali dokładnie raz, więc zmodyfikujesz tylko jeden z dwóch buforów, a potem będziesz tylko między nimi się przełączać, co będzie powodować miganie.
P-177429
Yumox
Temat założony przez niniejszego użytkownika
» 2020-08-06 16:21:51
Teraz rozumiem, dzięki :)
P-177430
« 1 »
  Strona 1 z 1