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

[SFML] Pętla

Ostatnio zmodyfikowano 2013-02-03 14:54
Autor Wiadomość
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.
C/C++
void GamePlay::play( sf::RenderWindow & window )
{
    //Tekstury
    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.
P-75611
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).
P-75615
polkom21
Temat założony przez niniejszego użytkownika
» 2013-02-02 23:13:47
No to muszę Cię zakoczyć bo czyszczę bufor

C/C++
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();
}
P-75619
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



P-75623
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)
P-75632
m4tx
» 2013-02-03 12:18:49
No to muszę Cię zakoczyć bo czyszczę bufor
C/C++
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).
P-75633
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.
P-75634
Mrovqa
» 2013-02-03 12:24:04
@polkom21,
Nawet nie wiesz, co robi twój kod... Przeanalizuj to:
C/C++
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.
P-75635
« 1 » 2 3
  Strona 1 z 3 Następna strona