[SFML] Problem z przechodzeniem w menu
Ostatnio zmodyfikowano 2014-06-13 15:09
kamilall234 Temat założony przez niniejszego użytkownika |
[SFML] Problem z przechodzeniem w menu » 2014-06-13 03:00:02 Witam. Tworze pierwszy raz menu, W moimi kodzie przechodze między menu, a tworzeniem graczy. Jednak powrotu z tworzenia graczy do głównego menu nie moge uzyskąc. Prosze o podpowiedź. Co robie źle itd. .Dlaczego mimo tego i ż klikam na powr ó t do menu, Nie przechodzi mi z powrotem ?
int main() { sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML 2.0 - http://cpp0x.pl" ); . . . sf::Texture przycisk; przycisk.loadFromFile( "Grafika/button.png" ); bool menu_jest = 1; bool przycisk_granie = false; menu_jest = 1; while( oknoAplikacji.isOpen() ) { bool przycisk_klik = false; sf::Event zdarzenie; oknoAplikacji.setPosition( sf::Vector2i( 300, 50 ) ); if( menu_jest == true ) { while( oknoAplikacji.pollEvent( zdarzenie ) ) if( zdarzenie.type == sf::Event::Closed ) oknoAplikacji.close(); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape ) oknoAplikacji.close(); if( zdarzenie.type == sf::Event::MouseButtonPressed && zdarzenie.mouseButton.button == sf::Mouse::Middle ) oknoAplikacji.close(); while( menu_jest == true ) { oknoAplikacji.clear(); oknoAplikacji.draw( menuglowne ); sf::Sprite przycisk1; przycisk1.setTexture( przycisk ); przycisk1.setPosition( sf::Vector2f( 300, 300 ) ); sf::Text graj( "GRAJ", font ); graj.setPosition( sf::Vector2f( 360, 300 ) ); oknoAplikacji.draw( przycisk1 ); oknoAplikacji.draw( graj ); oknoAplikacji.display(); while( przycisk_klik == false ) { while( oknoAplikacji.pollEvent( zdarzenie ) ) if( zdarzenie.type == sf::Event::Closed ) oknoAplikacji.close(); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape ) oknoAplikacji.close(); if( zdarzenie.type == sf::Event::MouseButtonPressed && zdarzenie.mouseButton.button == sf::Mouse::Middle ) oknoAplikacji.close(); if( sf::Mouse::isButtonPressed( sf::Mouse::Left ) && sf::Mouse::getPosition( oknoAplikacji ).x >= 300 && sf::Mouse::getPosition( oknoAplikacji ).x <= 460 && sf::Mouse::getPosition( oknoAplikacji ).y >= 297 && sf::Mouse::getPosition( oknoAplikacji ).y <= 337 ) { przycisk_klik = true; menu_jest = false; } } oknoAplikacji.clear(); menu_jest = false; przycisk_granie = true; przycisk_klik = false; } } bool wczytanie_graczy = false; while( przycisk_granie == true ) { oknoAplikacji.clear(); oknoAplikacji.draw( menuglowne ); sf::Sprite przycisk2; przycisk2.setTexture( przycisk ); przycisk2.setPosition( sf::Vector2f( 200, 300 ) ); przycisk2.scale( 0.6, 1 ); sf::Text text( "Gracz :", font ); text.setPosition( sf::Vector2f( 205, 300 ) ); oknoAplikacji.draw( text ); sf::Sprite przycisk3; przycisk3.setTexture( przycisk ); przycisk3.setPosition( sf::Vector2f( 300, 550 ) ); oknoAplikacji.draw( przycisk3 ); sf::Text menu( "Menu", font ); menu.setPosition( sf::Vector2f( 300, 550 ) ); oknoAplikacji.draw( menu ); oknoAplikacji.display(); oknoAplikacji.clear(); while( wczytanie_graczy == false ) { while( oknoAplikacji.pollEvent( zdarzenie ) ) if( zdarzenie.type == sf::Event::Closed ) oknoAplikacji.close(); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape ) oknoAplikacji.close(); if( zdarzenie.type == sf::Event::MouseButtonPressed && zdarzenie.mouseButton.button == sf::Mouse::Middle ) oknoAplikacji.close(); if( sf::Mouse::isButtonPressed( sf::Mouse::Left ) && sf::Mouse::getPosition( oknoAplikacji ).x >= 300 && sf::Mouse::getPosition( oknoAplikacji ).x <= 460 && sf::Mouse::getPosition( oknoAplikacji ).y >= 550 && sf::Mouse::getPosition( oknoAplikacji ).y <= 590 ) { menu_jest = true; przycisk_granie = false; wczytanie_graczy == true; oknoAplikacji.draw( przycisk2 ); } } } oknoAplikacji.display(); } return 0; }
|
|
maly |
» 2014-06-13 07:37:34 while( oknoAplikacji.isOpen() ) while( menu_jest == true ) while( przycisk_klik == false ) Coś za bardzo zakręcone. while( oknoAplikacji.pollEvent( zdarzenie ) )
if( zdarzenie.type == sf::Event::Closed ) oknoAplikacji.close();
if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape ) oknoAplikacji.close();
if( zdarzenie.type == sf::Event::MouseButtonPressed && zdarzenie.mouseButton.button == sf::Mouse::Middle ) oknoAplikacji.close(); To bierze pod uwagę tylko sf::Event::Closed dwa kolejne teoretycznie przy odrobinie pecha mogłyby nawet zamknąć aplikację. if( sf::Mouse::isButtonPressed( sf::Mouse::Left ) && sf::Mouse::getPosition( oknoAplikacji ).x >= 300 && sf::Mouse::getPosition( oknoAplikacji ).x <= 460 && sf::Mouse::getPosition( oknoAplikacji ).y >= 550 && sf::Mouse::getPosition( oknoAplikacji ).y <= 590 )
Bardziej pewny, zrozumiały i czytelny sposób: sf::Vector2f MousePos = oknoAplikacji.mapPixelToCoords( sf::Mouse::getPosition( oknoAplikacji ) ); if( sf::Mouse::isButtonPressed( sf::Mouse::Left ) && przycisk1.getGlobalBounds().contains( MousePos ) ) { } Podziel kod na funkcje bo im dłuższy kod w kupie tym łatwiej się pogubić. A co do pytania to niewiem bo jak wspomniałem na początku kod jest za bardzo zakręcony. |
|
kamilall234 Temat założony przez niniejszego użytkownika |
» 2014-06-13 15:09:10 OK wszystko jest już jak należy. ALe teraz pytanie nr 2. Stworzyłem sobie funkcje do tworzenia Sprite i funkcje do tworzenia Text. W sprite wszystko łądnie działa, tylko teraz problem z text. Otóż chciałbym aby text przybierał współrzędne już stworzonego Sprite. Próbuje ciągle zrobić to za pomocą getGlobalBounds(). Ale nie wiem jak przypasować setPosition text do tego. sf::Text tekst( sf::Sprite przycisk, std::string n ) { sf::Font font; font.loadFromFile( "Grafika/arial.ttf" ); sf::Text teks( n, font ); teks.setPosition( sf::Vector2f( przycisk.getGlobalBounds() ) ) return teks; }
Edit: Problem zażegnany. Vector2f robi co trzeba :) |
|
« 1 » |