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

[SFML] Błąd z czyszczeniem ekranu.

Ostatnio zmodyfikowano 2013-08-01 15:39
Autor Wiadomość
domin568
Temat założony przez niniejszego użytkownika
[SFML] Błąd z czyszczeniem ekranu.
» 2013-08-01 14:36:24
Witam , stworzyłem manu , jest już w 100 % skończone , zapisałem sobie je w funkcji
bool menu( sf::RenderWindow & );
 Wygląda ona tak :
C/C++
bool menu( sf::RenderWindow & okno )
{
    sf::Event zdarzenie;
    sf::Texture backgroundTex;
    backgroundTex.loadFromFile( "menu.jpg" );
    sf::Sprite menu;
    menu.setTexture( backgroundTex );
   
    Button start( 325, 230, 150, 60, "START" );
    Button wyjscie( 290, 310, 215, 60, "WYJSCIE" );
    while( okno.isOpen() )
    {
       
        while( okno.pollEvent( zdarzenie ) )
        {
           
            sf::Vector2f posMouse( sf::Mouse::getPosition( okno ).x, sf::Mouse::getPosition( okno ).y );
            start.inRectangle( posMouse );
            wyjscie.inRectangle( posMouse );
           
            if( zdarzenie.type == sf::Event::Closed )
            {
               
                okno.close();
                return false;
            }
            if( zdarzenie.type == sf::Event::MouseButtonReleased && wyjscie.inRectangle( posMouse ) == true )
            {
               
                okno.close();
               
                return false;
            }
           
            if( zdarzenie.type == sf::Event::MouseButtonReleased && start.inRectangle( posMouse ) == true )
            {
                return true;
            }
           
           
           
        }
       
        okno.draw( menu );
        wyjscie.RysujPrzycisk( okno );
        start.RysujPrzycisk( okno );
        okno.display();
    }
}

Wchodze w moje menu , klikam na przycisk (jest uaktywniony stan kliknięcia , czyli ma niebieska obwódke ) , wtedy powinno mnie przenieść do funkcji głównej (main) bo ta funkcja się już skończyła
C/C++
int _tmain( int argc, _TCHAR * argv[] )
{
    sf::RenderWindow okno( sf::VideoMode( 800, 600, 32 ), "Pierwsze menu" );
   
   
    if( menu( okno ) == true )
    {
        gra( okno );
    }
   
   
   
    return 0;
}
Wtedy przenosi mnie do mojej funkcji "gra"
C/C++
bool gra( sf::RenderWindow & okno )
{
   
    sf::RectangleShape kwadrat;
    kwadrat.setPosition( 400, 300 );
    kwadrat.setSize( sf::Vector2f( 50, 60 ) );
    sf::Event zdarzenie;
   
    while( okno.isOpen() )
    {
       
        while( okno.pollEvent( zdarzenie ) )
        {
            sf::Vector2f posMouse( sf::Mouse::getPosition( okno ).x, sf::Mouse::getPosition( okno ).y );
           
           
            if( zdarzenie.type == sf::Event::Closed )
            {
                okno.close();
                return true;
            }
           
           
           
        }
    }
    okno.clear( sf::Color( 255, 0, 0, 255 ) );
    okno.draw( kwadrat );
    okno.display();
   
}
I na ekranie zostaje tak jakby screenshot ostatniej klatki z funkcji "menu" czyli że menu nie jest już aktywne , nie moge klikać przycisków , lecz w funkcji gra próbuje rysować nawet zwykły kwadrat i nie daje rady , próbuje czyścić ekran ale na nic się to zdaje , czy wogóle mój sposób jest dobry i czy tak można robić w SFML ?
P-89183
Mrovqa
» 2013-08-01 15:24:00
W funkcji menu nie czyścisz okna.
P-89190
domin568
Temat założony przez niniejszego użytkownika
» 2013-08-01 15:32:18
Dopisałem
okno.clear()
 przed rysowaniem wszystkich obiektów w funkcji menu , to nie czyśći :( , gdzie bym tego nie wpisał to nic się nie stanie .
P-89192
Mrovqa
» 2013-08-01 15:37:05
W funkcji gra rysowanie (a więc czyszczenie też!) masz poza pętlą.
P-89193
domin568
Temat założony przez niniejszego użytkownika
» 2013-08-01 15:39:57
Wielkie DZIĘKI !! ależ banalny błąd ... Pewnie ten błąd wyniknął ze złego przekopiowania pętli , bo kopiowałem z funkcji menu .
P-89196
« 1 »
  Strona 1 z 1