[SFML 2.0] Błędne odczytywanie pozycji myszy
Ostatnio zmodyfikowano 2013-07-04 15:54
sheadovas Temat założony przez niniejszego użytkownika |
[SFML 2.0] Błędne odczytywanie pozycji myszy » 2013-07-04 11:54:45 Na początku kod poniżej opis problemu void Singleplayer::runGame( sf::RenderWindow & window ) { bool menu = false; while( !menu ) { sf::Event zdarzenie; sf::Vector2f mysz( sf::Mouse::getPosition( window ) ); while( window.pollEvent( zdarzenie ) ) { if( zdarzenie.type == sf::Event::KeyReleased && zdarzenie.key.code == sf::Keyboard::Escape ) { menu = true; } if( f_komputer[ 0 ][ 0 ].contains( mysz ) ) MessageBox( NULL, "", "", NULL ); } window.clear(); draw( window ); window.display(); } } Napisałem funkcje, która ma uruchamiać grę, wszystko fajnie działa poza tym że program z niewiadomych mi przyczyn nie nadaje wartości dla pozycji myszy która jest tutaj wyrażona zamienną sf::Vector2f mysz. Obecnie gdy mysz znajduje się w środku kwadratu ma wyskoczyć komunikat(który służy jedynie do potwierdzenia że warunek działa prawidłowo). f_komputer[0][0] to tablica sf::FloatRect, której nadałem pozycje sprite'a komputer[0][0] za pomocą pętli w konstruktorze w ten sposób: f_komputer[i][j] = komputer[i][j].getGlobalBounds(); Co ciekawe za pomocą tego samego sposobu wybiera się poszczególne opcje w menu #EDIT Zapomniałem dodać wcześniej sprawdzałem także warunek, w którym gdy mysz najechała na odpowiedni obszar, miał pojawiać się komunikat, gdy zabierałęm mysz z tego obszaru komunikat cały czas się pojawiał |
|
akwes |
» 2013-07-04 12:12:55 Ogólnie, słabo widzę żeby sf::Vector2f można zainicjalizować sf::Vecotr2i bo taką wartość zwraca getPosition.
Coś mi się wydaje, że albo musisz przebudować projekt, albo nie widzisz błędu kompilacji i odpalasz stary program. |
|
sheadovas Temat założony przez niniejszego użytkownika |
» 2013-07-04 14:57:54 Co do tego że odpala stary program to odpada, ponieważ gdy mam błąd, wyskakuje komunikat, że znaleziono błędy i jest pytanie czy chce odpalić stary build, a co do twojej pierwszej uwagi to ten sposób działa tak jak wspominałem, działa mi tutaj ale jedynie w menu, które jest bezpośrednio w funkcji main() i nie wiem dlaczego w zasadzie identycznie napisany kod tam działa, a tutaj nie, jeszcze pokombinuje
EDIT: Pozmieniałem trochę, miał kod teraz wykrywać czy mysz jest na pozycji tła po kliknięciu myszą - kod działa
EDIT2: Chyba znalazłem rozwiązanie, gdy wrzuciłem do pętli instrukcje z ustawianiem pozycji kod zaczął działać prawidłowo, zaraz wrzucę kod na forum |
|
sheadovas Temat założony przez niniejszego użytkownika |
» 2013-07-04 15:54:32 Aby kod działał musi być odświeżana wartość FloatRect co pętle (nie wiem dlaczego), tak wygląda moja funkcja po poprawkach może komuś się przyda void Singleplayer::runGame( sf::RenderWindow & window ) { Singleplayer(); bool menu = false; sf::FloatRect f_gracz[ 10 ][ 10 ]; while( !menu ) { for( int i = 0; i < 10; i++ ) for( int j = 0; j < 10; j++ ) f_gracz[ i ][ j ] = gracz[ i ][ j ].getGlobalBounds(); sf::Event zdarzenie; sf::Vector2f mysz( sf::Mouse::getPosition( window ) ); while( window.pollEvent( zdarzenie ) ) { if( zdarzenie.type == sf::Event::KeyReleased && zdarzenie.key.code == sf::Keyboard::Escape ) { menu = true; } if( zdarzenie.type == sf::Event::MouseButtonPressed ) { if( f_gracz[ 3 ][ 3 ].contains( mysz ) ) MessageBox( NULL, NULL, NULL, NULL ); } } window.clear(); draw( window ); window.display(); } } |
|
« 1 » |