[SFML 2.0] Menu gry
Ostatnio zmodyfikowano 2014-02-26 15:52
PCS Temat założony przez niniejszego użytkownika |
[SFML 2.0] Menu gry » 2014-02-25 21:04:58 Czołem, mam kolejny problem, mianowicie po kliknięciu w menu "Wyjdź" bądź ESC na klawiaturze, menu się zcina i jedyna rada to wyłączenie procesu. O to kod źródłowy: void Menu::menuRun() { sf::Text tytul( "asde", czcionka, 80 ); tytul.setStyle( sf::Text::Bold ); tytul.setPosition( 1280 / 2 - tytul.getGlobalBounds().width / 2, 20 ); const int ileNapisow = 2; sf::Text tekst[ ileNapisow ]; std::string napisy[] = { "Graj", "Wyjdz" }; for( int i = 0; i < ileNapisow; i++ ) { tekst[ i ].setFont( czcionka ); tekst[ i ].setCharacterSize( 65 ); tekst[ i ].setString( napisy[ i ] ); tekst[ i ].setPosition( 800 / 2 - tekst[ i ].getGlobalBounds().width / 2, 250 + i * 120 ); } int selected = 0; while( status == MENU ) { sf::Event event; while( oknoGry.pollEvent( event ) ) { if( event.type == sf::Event::Closed ||( event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::Escape ) ) { status = WYJDZ; } if( event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::Up ) { selected--; if( selected == - 1 ) selected = 1; } if( event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::Down ) { selected++; if( selected == 2 ) selected = 0; } if( event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::Space ) { switch( selected ) { case 0: break; case 1: status = WYJDZ; break; } } } for( int i = 0; i < 2; i++ ) { if( i == selected ) tekst[ i ].setString( ">>" + napisy[ i ] + "<<" ); else tekst[ i ].setString( napisy[ i ] ); } oknoGry.clear( sf::Color( 255, 0, 0 ) ); for( int i = 0; i < 2; i++ ) oknoGry.draw( tekst[ i ] ); oknoGry.display(); } }
Tak uruchamiam menu: void Klasag::petlaGlowna() { while( status != WYJDZ ) { switch( status ) { case MENU: menu.menuRun(); break; case GRA: break; } } }
Zastosowałem tutaj listę enum, o to ona: #include <SFML\Graphics.hpp> #include <Windows.h> #include <string>
enum StatusGry { MENU, GRA, WYJDZ };
class Menu { public: Menu( void ); ~Menu( void ); StatusGry status; void petlaGlowna(); void gramy(); void menuRun(); private: sf::Font czcionka; };
Dzięki z góry. |
|
hincu |
» 2014-02-25 21:50:35 przekombinowales z enumami, tutaj musi byc blad skoro apka sie crashuje |
|
colorgreen19 |
» 2014-02-25 22:04:06 moze nie mam w tym doswiadczenia, bo sam zaczolem dopiero nie dawno pisac gre ale szybko odkrylem ze bez dobrego gui nie zajdziesz daleko. polecam ci "napisac" chociaz klase przycisk, a ktorym bedziesz mogl wyswietlac tekst, a nie robic to tak jak teraz ty |
|
SeaMonster131 |
» 2014-02-25 22:10:28 Nie wiem co masz źle w kodzie, ale ja robię to podobny sposób i jestem zadowolony: while( 1 ) { if( GameState == menu ) rysujMenu(); if( GameState == opcje ) rysujOpcje(); }
|
|
hincu |
» 2014-02-25 22:16:13 swoja droga co robisz jesli status == wyjdz? wychodzisz z petli i co dalej? zadnego zamkniecia okna? |
|
PCS Temat założony przez niniejszego użytkownika |
» 2014-02-25 22:22:13 Nie jestem pewien, ale chyba wiem w czym problem, mianowicie w klasie "Menu" nie ma dojścia do klasy "Klasag" gdzie jest funkcji petlaGlowna() i tam powinno zamknąć tę petlę, lecz status == WYJDZ tam nie dochodzi. Próbowałem dodać nagłówek "#include "Klasag.h" do klasy właśnie "Menu" lecz wyskakuje szereg błędów zapewne spowodowane tym, że w klasie Klasag już dałem nagłówek "Menu.h". Jest jakaś rada, aby dostać się do funkcji z innej klasy bez nadawania nagłówka? |
|
hincu |
» 2014-02-25 22:25:23 dziedziczenie + metoda wirtualna lub zmien ograniczenie dostepu zapewne z protected na public |
|
PCS Temat założony przez niniejszego użytkownika |
» 2014-02-25 22:35:36 Próbowałem za pomocą dziedziczenia lecz wyskakuje błąd: error: expected class-name before '{' token
|
|
« 1 » 2 |