Witam, przez ostatni czas zgryzam zęby ze względu na problem który mi doskwiera. Muszę zastanowić się nad algorytmem do swojej gry, który będzie odpowiedzialny o blokowanie myszki, gdyby ta chciała wyjść poza ekran (Chcę, by myszką można było poruszać tylko i wyłącznie wokół okienka). Problem niby prosty, więc się zabrałem za to w taki sposób: Jeżeli dana pozycja X lub Y myszki jest poza ekranem (x < 0 || x > 1280, oraz y < 0 || y > 800) to resetuje mi pozycje myszki. Algorytm "jakoś" działa, i wygląda w moim kodzie tak:
if (sf::Mouse::getPosition(window).x < 0 )
sf::Mouse::setPosition(sf::Vector2i(0,sf::Mouse::getPosition(window).y),window);
if (sf::Mouse::getPosition(window).x > 1024)
sf::Mouse::setPosition(sf::Vector2i(1024,sf::Mouse::getPosition(window).y),window);
if (sf::Mouse::getPosition(window).y < 0)
sf::Mouse::setPosition(sf::Vector2i(sf::Mouse::getPosition(window).x,0),window);
if (sf::Mouse::getPosition(window).y > 800)
sf::Mouse::setPosition(sf::Vector2i(sf::Mouse::getPosition(window).x,800),window);
Dla ułatwienia, w pseudokodzie można było by to zapisać w takiej postaci:
if (MouseX < 0)
MouseSetPosition(0, MouseY);
if (MouseX > 1280) // 1280 to szerokość okienka
MouseSetPosition(1280, MouseY);
if (MouseY < 0)
MouseSetPosition(MouseX,0);
if (MouseY < 800) // 800 to wysokość okienka
MouseSetPosition(MouseX, 800);
Niestety, w taki sposób nie mogę doskonale zablokować myszki, bo w rzeczywistości można nią wyjść poza ekran, jeżeli w ciągu jednej klatki szybko machniemy myszką.
W przypadku innych gier, takie coś nie ma miejsca - przykładowo w grze Dota 2, która idealnie blokuje myszkę. (Oczywiście w okienkowym modzie, bo o takim mówimy)
Moje pytanie brzmi, czy jest w SFML 2.0 coś, co umożliwi mi ustanowienie limitu poruszania myszki tylko i wyłącznie w obrębie ekranu. Lub czy istnieje jakaś uniwersalna metoda, o której nie mam zielonego pojęcia.
Pozdrawiam.