[SFML, C++] Miganie ekranu
Ostatnio zmodyfikowano 2011-07-10 14:43
Dawidsoni Temat założony przez niniejszego użytkownika |
[SFML, C++] Miganie ekranu » 2011-07-09 18:55:56 Dlaczego, kiedy rysuję na ekranie prostokąty to migają one? Poniżej kod: #include<SFML/Window.hpp> #include<SFML/Graphics.hpp> using namespace sf;
int main() { RenderWindow Okno( VideoMode( 800, 600, 32 ), "Edytor" ); Event zdarzenie; Image obraz; obraz.LoadFromFile( "obraz.bmp" ); Sprite sprajt( obraz ); const Input & przycisk = Okno.GetInput(); while( Okno.IsOpened() ) { while( Okno.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == Event::Closed ) Okno.Close(); if( przycisk.IsMouseButtonDown( Mouse::Left ) ) { sprajt.SetPosition( przycisk.GetMouseX(), przycisk.GetMouseY() ); Okno.Draw( sprajt ); } } Okno.Display(); } return 0; }
|
|
skovv |
» 2011-07-09 19:28:55 Może podwójne bufowanie? |
|
Nevervell |
» 2011-07-09 19:31:09 A może następny rozdział??? Już na samym początku jest napisane dlaczego się tak dzieje. |
|
DejaVu |
» 2011-07-09 19:42:14 Czemu robisz rysowanie w pętli przetwarzania komunikatów? |
|
Dawidsoni Temat założony przez niniejszego użytkownika |
» 2011-07-09 21:04:30 Dobra. Rozumiem, że nie można nic rysować w pętli komunikatów, bo wtedy ekran miga. Zmieniłem to tak: #include<SFML/Window.hpp> #include<SFML/Graphics.hpp> using namespace sf;
int main() { RenderWindow Okno( VideoMode( 800, 600, 32 ), "Edytor" ); Event zdarzenie; Image obraz; obraz.LoadFromFile( "obraz.bmp" ); Sprite sprajt( obraz ); const Input & przycisk = Okno.GetInput(); while( Okno.IsOpened() ) { while( Okno.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == Event::Closed ) Okno.Close(); if( przycisk.IsMouseButtonDown( Mouse::Left ) ) { sprajt.SetPosition( przycisk.GetMouseX(), przycisk.GetMouseY() ); } } if( przycisk.IsMouseButtonDown( Mouse::Left ) ) { sprajt.SetPosition( przycisk.GetMouseX(), przycisk.GetMouseY() ); Okno.Draw( sprajt ); } Okno.Display(); } return 0; } i działa. A gdybym chciał, żeby raz na samym początku sprawić, że tło będzie białe? Próbowałem czyścić ekran na biało w tym samym miejscu, co rysowałem tego sprajta. Program jednak miga. Jeśli zrobię tak: if( przycisk.IsMouseButtonDown( Mouse::Right ) ) Okno.Clear( Color::White ); to działa, a chcę, żeby okno zrobiło się białe na samym początku, więc piszę: bool czy = false; ..... ..... ..... while( Okno.IsOpened() ) { ..... ..... ..... if( czy == false ) { czy = true; Okno.Clear( Color::White ); } Okno.Display(); }
i znów miga. Dlaczego? |
|
SeaMonster131 |
» 2011-07-09 22:17:02 To może spróbuj wyczyścić ekran na biało przed pętlą? |
|
Dawidsoni Temat założony przez niniejszego użytkownika |
» 2011-07-09 22:26:10 Pròbowałem, ale też migało. A może macie jakiś inny sprawdzony sposób na to, żeby nie migało w tym przypadku? |
|
DejaVu |
» 2011-07-10 04:25:45 Będzie ekran migał z prostego powodu - komunikaty nie przychodzą za każdym obiegiem pętli - przychodzą tylko i wyłącznie gdy się pojawią. Równie dobrze żaden komunikat może nie przyjść przez kilka minut jeżeli użytkownik nie będzie podejmował żadnej interakcji, a pętla renderująca wykona się w tym czasie tysiące razy. Jak się pisze kod źle to i będzie on źle działał - pisz poprawnie kod to ekran nie będzie mrugał? |
|
« 1 » 2 |