Skocz do zawartości


[SFML] Odczytywanie pozycji sprajtów i myszy


2 odpowiedzi w tym temacie

#1 Sianoo

    Nowy na forum

  • Użytkownicy
  • 18 Postów:
  • Gadu-Gadu:36181773

Napisano śro, 09 maj 2012 - 21:19

Witam,
Jestem początkującym programistą i ostatnio natknąłem się na kurs biblioteki SFML. Nie było w nim za wiele na temat odczytywania bieżących pozycji myszy i sprajtów. Ostatnio pisząc pewną aplikację natknąłem się na problem z tym fragmętem kodu:
c++
sf::Event zdarzenie;
        while( oknoAplikacji.GetEvent( zdarzenie ) )
                {
                if (zdarzenie.Type == sf::Event::Closed)
                        oknoAplikacji.Close();
 
                if ((zdarzenie.Type == sf::Event::MouseButtonPressed) && (zdarzenie.MouseButton.Button == sf::Mouse::Left))
                {
 
                        if (((zdarzenie.MouseMove.X >= person_button.GetPosition().x) && (zdarzenie.MouseMove.Y >= person_button.GetPosition().y)) && ((zdarzenie.MouseMove.X <= person_button.GetPosition().x+50) && (zdarzenie.MouseMove.Y <= person_button.GetPosition().y+41)))
                        {
                        oknoAplikacji.Close();
                        }
                }
                }


Ten fragmęt odczytuje Eventy. Chodzi mi o to, by po kliknięciu na sprajt(wymiary to 50x41) aplikacja zamykała się.

Z góry thx.

#2 MacMercury

    Nowy na forum

  • Użytkownicy
  • 15 Postów:
  • Gadu-Gadu:17910751

Napisano sob, 26 sty 2013 - 20:25

Temat dawno nieaktualny, ale mimo to napiszę rozwiązanie - może komuś się przyda.

Ja w swojej grze rozwiązałem to tak, że tworzę nowy, praktycznie niewidoczny sprite 1x1, który aktywnie podąża za kursorem:
cpp

sf::Image img_cursor;
img_cursor.Create(1, 1, sf::Color::Black);
sf::Sprite cursor;
cursor.SetImage(img_cursor);
/// Blablabla
while(1)
{
cursor.SetPosition(sterowanie.GetMouseX(), sterowanie.GetMouseY());

gdzie sterowanie to:
cpp
const sf::Input &sterowanie = okno->GetInput();

gdzie okno to wskaźnik sf::RenderWindow* :P

W przypadku kolizji przycisku z pseudokursorem (używając PixelPerfectTest z tego) oraz wciśnięciu LPM ma wykonać kod.

#3 Placek22

    Nowy na forum

  • Użytkownicy
  • 4 Postów:

Napisano nie, 12 kwi 2015 - 13:24

jak to rozwiązałeś? bo ja mam 2 takie problemy