Nachodzące na siebie obrazki w menu głównym.

0

Wczoraj zacząłem bawić się z SFML ale nie potrafię zrobić czegoś w stylu menu głównego gry. Np po uruchomieniu programu pojawia się okno z obrazkiem na którym pisze "Nowa gra wciśnij 1" i "Wyjście kliknij ESC" i jak kliknę 1 to pojawia się jakieś tło z tekstem a stare znika. Po wielu nieudanych próbach nabazgrałem takie coś bo innego pomysłu na to nie mam. Po skompilowaniu oba obrazki nachodzą na siebie (co jest w sumie oczywiste patrząc na kod poniżej). Szukałem też w internecie ale nic nie mogłem znaleźć. Dodam też, że dopiero zaczynam programować.


    while( oknoAplikacji.isOpen() )
    {
    
        sf::Event zdarzenie;
        while (oknoAplikacji.pollEvent( zdarzenie ) )
        {
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape )
            {
                oknoAplikacji.close();
                exit( 0 );
            }

            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Num1 )
            {
                goto newgame;
                oknoAplikacji.clear( sf::Color::Black );
                sf::Event::Closed;
            }
        }
        oknoAplikacji.clear( sf::Color::Black );
        oknoAplikacji.draw( obrazek );
        oknoAplikacji.display();

        newgame:
        sf::Event zdarzenie2;
        while (oknoAplikacji.pollEvent( zdarzenie2) )
        {
            if( zdarzenie2.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape )
            {
                oknoAplikacji.close();
                exit( 0 );
            }
        }
        oknoAplikacji.clear( sf::Color::Black );
        oknoAplikacji.draw( obrazek2 );
        oknoAplikacji.display();
0
Eiter napisał(a):

Po skompilowaniu oba obrazki nachodzą na siebie (co jest w sumie oczywiste patrząc na kod poniżej).

Po skompilowaniu nachodzą na siebie? Może by tak po polsku, co?

Szukałem też w internecie ale nic nie mogłem znaleźć.

Czego szukałeś w internecie? Zadaj jakieś pytanie, bo póki co nie wiadomo co chcesz osiągnąć.

1

Nie sądziłem, że kiedykolwiek jeszcze zobaczę goto w świeżym kodzie...

A tak na poważnie, podejdź do tego jakoś porządnie. Rozrysuj to sobie: każdy ekran lub sekcja gry/aplikacji niech będzie osobną klasą lub osobnym obiektem (jeśli klasą będzie na przykład GameScreen). Dopiero wtedy niech wyświetlanie danego ekranu lub sekcji determinowane będzie przez czas życia obiektu lub jej pole sprawdzane jakimś get'em.

Póki co próbujesz zrobić to "na szybko" i efekty są takie, że dzieje się coś złego gdy masz w aplikacji dwa osobne ekrany. Wyobraź sobie zatem co się będzie działo w takim podejściu gdy ekranów tych będziesz miał już na przykład dziesięć.

0

Dobra, jakoś to tam ogarnąłem w taki sposób:


oknoAplikacji.clear( sf::Color::Black );
oknoAplikacji.draw( obrazek );
oknoAplikacji.display();
    
while( oknoAplikacji.isOpen() )
    {

        sf::Event zdarzenie;
        while (oknoAplikacji.pollEvent( zdarzenie ) )
        {

            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape )
            {
                oknoAplikacji.close();
                exit( 0 );
            }

            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Num1 )
            {
                oknoAplikacji.clear();
                oknoAplikacji.draw( obrazek2 );
                oknoAplikacji.display();
                liczba = liczba + 1;
                cout<<liczba<<endl;
            }
        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1