Wstęp
W tej części poradnika zajmiemy się omówieniem instrukcji warunkowych klawiatury, myszy i joysticka. Przydają się one do sprawdzenia, czy określony klawisz jest wciąż wciśnięty.
Klawiatura
Klasa, która daje nam dostęp do klawiszy na klawiaturze to sf::Keyboard. Ta klasa zawiera tylko jedną metodę: isKeyPressed, która sprawdza czy klawisz jest wciśnięty, jeżeli tak to zwraca true, w przeciwnym razie false. Jako argument przyjmuje klawisz, który ma zostać sprawdzony. Co trzeba zaznaczyć to fakt, że to metoda sprawdza bezpośrednio stan klawisza, czyli działa nawet wtedy gdy okno jest niekatywne.
1 2 3 4 5 |
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { // strzałka w lewo jest wciśnięta: poruszenie naszej postaci character.move(-1, 0); } |
Mysz
Klasą odpowiedzialną za obsługę myszy jest sf::Mouse. Podobnie jak w przypadku klawiatury mysz posiada instrukcję warunkową wciśnięcia klawiszy.
1 2 3 4 5 |
if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) { // wciśnięto LPM gun.fire(); } |
Przyciski myszy zawarte są w enum sf::Mouse::Button.
Możesz także pobrać pozycję myszy względem pulpitu lub okna gry.
1 2 3 4 5 |
// pobranie pozycji względem pulpitu sf::Vector2i globalPosition = sf::Mouse::getPosition(); // pobranie pozycji względem okna sf::Vector2i localPosition = sf::Mouse::getPosition(window); // window to sf::RenderWindow |
Analogicznie można też ustawić pozycję myszy:
1 2 3 4 5 |
// ustawienie pozycji względem pulpitu sf::Mouse::setPosition(sf::Vector2i(10, 50)); // ustawienie pozycji względem okna sf::Mouse::setPosition(sf::Vector2i(10, 50), window); // window to sf::RenderWindow |
Joystick
Klasa, która daje nam dostęp do obsługi pada to sf::Joystick. Tak jak reszta klas w tym tutorialu posiada wyłącznie funkcje statyczne (z przedrostkiem static).
Każdy Joystick posida swoje id numerowane od 0-7 (bo SFML obsługuje maksymalnie 8 padów). Pierwszy argument każdej metody sf:Joysticks to jego id.
Możesz sprawdzić, czy Joystick o określonym id jest podłączony w następujący sposób:
1 2 3 4 5 |
if (sf::Joystick::isConnected(0)) { // joystick numer 0 jest podłączony ... } |
Można także sprawdzić niektóre parametry joysticków:
1 2 3 4 5 |
// sprawdzenie liczby przycisków joysticka nr 1 unsigned int buttonCount = sf::Joystick::getButtonCount(0); // sprawdzenie czy joystick nr 0 ma oś Z bool hasZ = sf::Joystick::hasAxis(0, sf::Joystick::Z); |
Osie są zdefiniowane w enum sf::Joystick::Axis. A przyciski są ponumerowane od 0 do 31.
W ten sposób możesz sprawdzić czy jakiś klawisz jest wciśnięty, a także możesz sprawdzić pozycję osi:
1 2 3 4 5 6 7 8 9 10 |
// czy wciśnięto przycisk 1, pada od id 0 if (sf::Joystick::isButtonPressed(0, 1)) { gun.fire(); } // jaka jest bieżąca pozycja osi X i Y pada od id 0 float x = sf::Joystick::getAxisPosition(0, sf::Joystick::X); float y = sf::Joystick::getAxisPosition(0, sf::Joystick::Y); character.move(x, y); |