Yumox Temat założony przez niniejszego użytkownika |
SFML Migotanie ekranu » 2020-08-05 13:49:38 Mam problem z prostym programem: #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? |
|
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 ) |
|
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. |
|
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ą. #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; } |
|
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ć. |
|
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. |
|
Yumox Temat założony przez niniejszego użytkownika |
» 2020-08-06 16:21:51 Teraz rozumiem, dzięki :) |
|
« 1 » |