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

[SFML] Zdarzenie zależne od pozycji myszki

Ostatnio zmodyfikowano 2016-04-27 11:42
Autor Wiadomość
wojtek1904
Temat założony przez niniejszego użytkownika
[SFML] Zdarzenie zależne od pozycji myszki
» 2016-04-19 21:06:51
Witam, chciałbym prosić o pomoc w wytłumaczeniu mi czegoś :P Kiedy chcę, aby jakieś zdarzenie miało miejsce jeśli został wciśnięty lewy przycisk myszy i wskaźnik jest w odpowiednim miejscu, to instrukcja warunkowa powinna brzmieć mniej więcej tak:

if ( zamkniecie.type == sf::Event::MousseButtonPressed && zamkniecie.mouseButton.button == sf::Mouse::Left && sf::Mouse::getPosition( oknoAplikacji )....

no i właśnie na końcówce mam problem, bo nie bardzo mogę ogarnąć jak po wzięciu pozycji porównać ją do wysokości i szerokości okna. Tzn np. jeśli mysz jest w położeniu względem osi x (250<x<500) a względem osi y (500<y<600).

Niby ciągle szukam wyjaśnienia na google ale albo czegoś nie rozumiem albo nie mogę znaleźć.

PS: mam nadzieję, że rozumiecie o co mi chodzi :D
P-147446
michal11
» 2016-04-19 21:22:54
W sumie to nie zrozumiałem co chcesz zrobić z ta pozycją muszy.
Napisz więcej co chcesz osiągnąć, w szczególności gdzie ma ten kursor być (może jakiś sprite?).
Ogólnie dostajesz pozycje myszki względem okna więc jeżeli getPosition zwróci ci (0,0) to znaczy, że jesteś w lewym górnym rogu okna.
P-147447
wojtek1904
Temat założony przez niniejszego użytkownika
» 2016-04-19 21:26:39
no jak masz oś x i y, to chciałbym, żeby powiedzmy okno się zamykało, w momencie kiedy lewym przyciskiem klikniesz w pole miedzy, na osi x 250 a 500, a na osi y między 500 a 600.
P-147448
Gibas11
» 2016-04-19 22:08:18
Użyj
sf::Mouse::getPosition( window ).x
 itp., w zależności od tego co chcesz osiągnąć.
Chociaż od takich złożonych warunków lepiej byłoby utworzyć
sf::IntRect rect
 i skorzystać z metody
contains( sf::Mouse::getPosition( window ) )
.
P-147449
wojtek1904
Temat założony przez niniejszego użytkownika
» 2016-04-19 22:17:01
dzięki, jutro spróbuje i dam znać czy się udało :) dzisiaj już siły nie mam do tego
P-147450
wojtek1904
Temat założony przez niniejszego użytkownika
» 2016-04-21 15:14:47
Ok, niestety to mi nie dziala: sf::Mouse::getPosition( window ).x, a tego zwyczajnie nie potrafie uzyc: sf::IntRect rect
Ale znalazlem temat tu na forum apropo detekcji czy myszka jest nad spajtem. Pomyslalem, ze to zaden problem przerobic wszystkie "guziki" na osobne grafiki, ale nie do konca rozumiem kod ktory opisany jest w kursie - http://cpp0x.pl/kursy/Kurs-SFML-1-6-C++/Tworzenie-i-wyswietlanie-sprajtow/333
Byłbym wdzięczny, jeśli ktoś spróbowałby mi to wytłumaczyć :) No i czy te instrukcje z kursu SFML 1.6 zadziałają z biblioteką 2.0? Bo, może to jakiś mój błąd, ale kiedy skopiowałem cały kod, wyskakiwały mi błędy typu (sorki, będe pisał z pamięci bo w pracy jestem :)): sf::Image is not member of sf::Sprite

Jeśli chodzi o linijki kodu których nie rozumiem w kursie to:

naszSprajt.SetCenter( obrazek.GetWidth() / 2.0f, obrazek.GetHeight() / 2.0f );

co to jest to / 2.0f?

sf::Vector2f punkt = naszSprajt.TransformToLocal( sf::Vector2f(( float ) sterowanie.GetMouseX(),( float ) sterowanie.GetMouseY() ) );

tej linijki tez nie do końca rozumiem.


bool bCzyZaznaczony =( punkt.x >= 0 && punkt.y >= 0 && punkt.x <= obrazek.GetWidth() && punkt.y <= obrazek.GetHeight() );

I czy w tej linijce, żeby kolor zmieniał się w momencie kliknięcia myszki, wystarczy dodać zdarzenie:

zdarzenie.type == sf::Event::MouseButtonPressed && zdarzenie.mouseButton.button == sf::Mouse::Left  ?:)

Z góry dzięki za odpowiedź.
P-147490
Gibas11
» 2016-04-21 15:58:23
/ 2.0f
 to zwyczajne dzielenie przez zmiennoprzecinkowe 2.

Nie ucz się SFML1.6, bo wersje 2.x działają na bardzo odmiennych zasadach i zerwano kompatybilność wsteczną ze starym API (zwykle to oznacza zmiana pierwszej liczby w numerze wersji).
P-147495
michal11
» 2016-04-21 21:42:35
Najlepiej to wklej tu swój kod, napisz konkretnie co chcesz osiągnąć i z czym masz problem. Bo ja w zasadzie nie wiem co chcesz zrobić i co nie działa.
P-147517
« 1 » 2
  Strona 1 z 2 Następna strona