Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.0] Błędne odczytywanie pozycji myszy

Ostatnio zmodyfikowano 2013-07-04 15:54
Autor Wiadomość
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

C/C++
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 ) )
        {
           
            //wyjście do menu
            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ł
P-86944
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.
P-86951
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
P-86960
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

C/C++
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 ) )
        {
           
            //wyjście do menu
            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();
    }
}
P-86962
« 1 »
  Strona 1 z 1