[SFML 2.1] Klikanie w tekst
Ostatnio zmodyfikowano 2014-11-27 19:09
Snaki Temat założony przez niniejszego użytkownika |
[SFML 2.1] Klikanie w tekst » 2014-11-27 18:38:00 Witam. Chcę stworzyć pewną gre, na początku chciałbym stworzyć menu. I tutaj mam mały problem. Gdy klikam "Wyjdź" - program nie zamyka się. Wydaje mi się, że wszystko napisałem poprawnie. Porównywałem inne kody... a to nie działa. Oto kod (to jeszcze mój poligon doświadczalny, kod nieupożądkowany): #include <SFML/Graphics.hpp> #include <SFML/System.hpp> #include <SFML/Window.hpp> #include <iostream> #include <string> #include <fstream>
using namespace std; using namespace sf;
enum opcje{GRA,MENU,WYJDZ};
int wylosuj() { return( rand() % 10 ) + 0; } int main() { srand( time( 0 ) ); opcje opcje; opcje = MENU; RenderWindow okno; okno.create(VideoMode(800,600), "Milionerzy"); int ile = 2; Font font; if(!font.loadFromFile("font.otf")) cout << "Brak czcionki!" << endl;
Texture tlo_menu; if(!tlo_menu.loadFromFile("tlo_menu.jpg")) cout << "Brak tla do menu!" << endl; Sprite tlo_menu1; tlo_menu1.setTexture(tlo_menu); Text tytul; Text wybor[ile]; tytul.setFont(font); tytul.setString("Milionerzy 0.0.1 by Kacper"); tytul.setColor(Color::Red); tytul.setStyle(Text::Bold); tytul.setCharacterSize(65); tytul.setPosition(800/2-tytul.getGlobalBounds().width/2,20); string nazwy[] = {"Graj!","Wyjdz"}; for(int i = 0; i < ile; i++) { wybor[i].setFont(font); wybor[i].setStyle(Text::Bold); wybor[i].setCharacterSize(50); wybor[i].setString(nazwy[i]); wybor[i].setPosition(800/2-wybor[i].getGlobalBounds().width/2,250+i*90); } /* int wylosowana_liczba = wylosuj(); string pyt[50], odpowiedzi[50], a, b, c, d, poprawna_odp[50]; ifstream plik; plik.open("pytania.txt"); if(!plik.good()) cout << "Nie udalo sie :C" << endl;
while(!plik.eof()) { for(int n = 0; n < 11; n++) getline(plik,pyt[n]);
} plik.close(); plik.open("odpowiedzi.txt"); if(!plik.good()) cout << "Nie udalo sie :(";
if(!plik.eof()) { for(int n = 0; n < 3; n++) getline(plik,odpowiedzi[n]); } plik.close(); plik.open("poprawne_odp.zablokowane"); if(!plik.good()) cout << "Nie udalo sie :(";
if(!plik.eof()) { for(int n = 0; n < 3; n++) getline(plik,poprawna_odp[n]); } cout << pyt[wylosowana_liczba] << endl; cout << odpowiedzi[wylosowana_liczba] << endl; cout << poprawna_odp[wylosowana_liczba] << endl; */ while(okno.isOpen()) { while(opcje == MENU) { Vector2f mysz(Mouse::getPosition()); //pobieranie pozycji myszki Event event; while(okno.pollEvent(event)) { if(event.type==Event::Closed) { // ew. zapis okno.close(); } //if if(wybor[1].getGlobalBounds().contains(mysz) && event.type == Event::MouseButtonReleased && event.key.code == Mouse::Left) { okno.close(); } } //while
okno.clear(); okno.draw(tlo_menu1); okno.draw(tytul); for(int i = 0; i < ile; i++) okno.draw(wybor[i]);
okno.display();
} // while MENU
}
return 0; }
|
|
maly |
» 2014-11-27 18:49:07 Vector2f mysz = okno.mapPixelToCoords( Mouse::getPosition( okno ) ); |
|
Snaki Temat założony przez niniejszego użytkownika |
Działa :D » 2014-11-27 19:04:54 Dzięki, działa! Tylko powiedz mi, dlaczego tamten sposób nie działał? |
|
NopeDotAvi |
» 2014-11-27 19:07:14 Bierzesz pozycję myszki względem ekranu. Jeżeli chcesz względem aplikacji musisz dać: sf::Mouse::getPosition( okno ); . Kolejnym razem wstaw kod w znaczniki [ cpp ] [/ cpp ] to lepiej będzie się czytało. |
|
maly |
» 2014-11-27 19:09:06 Pobierałeś pozycję myszy na ekranie zamiast na oknie. |
|
« 1 » |