polkom21 Temat założony przez niniejszego użytkownika |
[SFML] Pętla » 2013-02-02 22:27:23 Na początek może zacznę od kodu. void GamePlay::play( sf::RenderWindow & window ) { sf::Texture dockimg; sf::Texture background; if( !dockimg.loadFromFile( "Data/Images/dock.png" ) ) std::cout << "Nie znaleziono pliku dock.png\n"; if( !background.loadFromFile( "Data/Images/bg.jpg" ) ) std::cout << "Nie znaleziono pliku bg.jpg\n"; sf::Sprite dock; dock.setTexture( dockimg ); dock.setOrigin( 50, 0 ); bool playGame = true; while( playGame ) { sf::Vector2i mousePosition = sf::Mouse::getPosition( window ); dock.setPosition( mousePosition.x, 550 ); window.draw( dock ); } }
Głównie chodzi o to, że jak mam w takiej postaci to wyświetla mi się białe okno do nieba a chciał bym, żeby wyświetlały mi się normalnie obiekty. Czy ja coś źle zrobiłem czy tak po prostu nie może być? Jak nie ma tej pętli while to działa jak powinno ale nie może tak być niestety. |
|
Mrovqa |
» 2013-02-02 22:52:16 W głównej pętli nie czyścisz bufora okna (rysujesz po tym, co zostało z poprzedniego obiegu pętli). |
|
polkom21 Temat założony przez niniejszego użytkownika |
» 2013-02-02 23:13:47 No to muszę Cię zakoczyć bo czyszczę bufor while( aplikacja.isOpen() ) { while( aplikacja.pollEvent( event ) ) { if( event.type == sf::Event::Closed || sf::Keyboard::isKeyPressed( sf::Keyboard::Escape ) ) aplikacja.close(); } game.play( aplikacja ); aplikacja.display(); aplikacja.clear(); }
|
|
DanielSC |
» 2013-02-03 09:31:31 Aplikacja.Clear( Color ( 0 , 0 , 0 ) ); //Clear() z małej litery piszesz
Aplikacja.Draw( powietrze ); //tutaj rysujesz co chcesz w moim przypadku to jest powietrze
Aplikacja.Display(); //Display() z małej litery piszesz
|
|
ridic14 |
» 2013-02-03 12:04:18 Aplikacja.Clear( Color ( 0 , 0 , 0 ) ); //Clear() z małej litery piszesz |
A co jeśli ma sfml 2.0? z małej ma dobrze(dla sfml 2.0) |
|
m4tx |
» 2013-02-03 12:18:49 No to muszę Cię zakoczyć bo czyszczę bufor
aplikacja.display(); aplikacja.clear();
|
Szkoda tylko, że robisz to w sposób nieprawidłowy :) Najpierw powinieneś czyścić ekran, a potem renderować obiekty, bo robiąc tak, jak Ty teraz, to przez większość czasu nic nie będzie wyświetlane (czyli w praktyce - 100% czasu: renderujesz klatkę, natychmiastowo czyścisz ekran i czekasz na przygotowanie następnej klatki == nic się nie wyświetla oprócz tła). |
|
polkom21 Temat założony przez niniejszego użytkownika |
» 2013-02-03 12:22:26 Na prawdę robię to źle? To czemu jak w funkcji play w klasie GamePlay pozbędę się pętli while to działa? ridic14 dobra spostrzegawczość. Mam SFML 2.0. |
|
Mrovqa |
» 2013-02-03 12:24:04 @polkom21, Nawet nie wiesz, co robi twój kod... Przeanalizuj to: bool playGame = true; while( playGame ) { sf::Vector2i mousePosition = sf::Mouse::getPosition( window ); dock.setPosition( mousePosition.x, 550 ); window.draw( dock ); } Jak myślisz - kiedy pętla zakończy działanie? Dodam, iż czyścisz dopiero po opuszczeniu tej pętli, a nie w niej. |
|
« 1 » 2 3 |