Wprowadzenie
Jeżeli znasz z autopsji inne biblioteki graficzne, takie jak np. SDL czy Allegro to zapewne poprzedni rozdział pozostawił po sobie niedosyt w temacie obsługi klawiatury i myszy. Jeżeli tak jest to po przeczytaniu tego rozdziału powinieneś poczuć się usatysfakcjonowany możliwościami obsługi wspomnianych urządzeń przez bibliotekę
SFML 2.0.
Bezpośredni dostęp do klawiatury
Biblioteka
SFML 2.0 posiada klasę
sf::Keyboard, w której znajduje się metoda statyczna
isKeyPressed. Wspomniana metoda sprawdza, czy klawisz podany poprzez argument jest aktualnie wciśnięty. Jeżeli klawisz jest aktualnie wciśnięty to wówczas metoda statyczna
isKeyPressed zwróci wartość
true - w przeciwnym wypadku zostanie zwrócona wartość
false. Przykładowe wywołanie omówionej metody statycznej może wyglądać następująco:
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
{
}
Bezpośredni dostęp do myszy
Kolejnym popularnym urządzeniem wejściowym do komunikacji użytkownika z komputerem jest myszka. Obsługa wspomnianego urządzenia jest analogiczna do obsługi klawiatury, a więc opiera się o metody statyczne, które zostały umieszczone w klasie
sf::Mouse. Pracując z myszką, interesujące będą dla nas takie informacje jak aktualny stan wciśniętych przycisków myszki oraz aktualne położenie myszki. Aktualne położenie myszki można rozpatrywać pod wieloma aspektami, takimi jak:
W przypadku przycisków myszy sytuacja jest nieco prostsza, bowiem jedyne co nas interesuje to fakt, czy określony przycisk jest w danej chwili wciśnięty czy też nie.
Aktualny stan przycisków myszki
Sprawdzanie aktualnego stanu przycisków myszki sprowadza się do odpowiedniego wywołania metody statycznej
isButtonPressed, która znajduje się we wcześniej już wspomnianej klasie
sf::Mouse. Wspomniana metoda sprawdza, czy przycisk myszy podany poprzez argument jest aktualnie wciśnięty. Jeżeli przycisk myszy jest aktualnie wciśnięty to wówczas metoda statyczna
isButtonPressed zwróci wartość
true - w przeciwnym wypadku zostanie zwrócona wartość
false. Przykładowe wywołanie omówionej metody statycznej może wyglądać następująco:
if( sf::Mouse::isButtonPressed( sf::Mouse::Left ) )
{
}
Położenie myszki względem pulpitu
Jeżeli interesuje Ciebie aktualne położenie myszki względem pulpitu to wystarczy wywołać metodę statyczną o nazwie
getPosition, znajdującą się w klasie
sf::Mouse. Ważne jest, aby opisana metoda została wywołana bez podawania jakichkolwiek argumentów. W wyniku wywołania metody statycznej
getPosition, zwrócona zostanie aktualna pozycja myszy względem pulpitu. Przykład:
sf::Vector2i pozycjaMyszyWzgledemPulpitu = sf::Mouse::getPosition();
Położenie myszki względem podanego okna SFML
Jeżeli interesuje Ciebie aktualne położenie myszki względem konkretnego okna, utworzonego przy pomocy biblioteki SFML to należy wywołać metodę statyczną o nazwie
getPosition oraz dodatkowo za pomocą argumentu określić okno, względem którego współrzędne myszy mają zostać zwrócone. Przykładowo może być to:
sf::Window oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML 2.0 - http://cpp0x.pl" );
sf::Vector2i pozycjaMyszyWzgledemOkna = sf::Mouse::getPosition( oknoAplikacji );
Położenie myszki na scenie
Pobranie aktualnego położenia myszki na scenie sprowadza się do wywołania metody
convertCoords, należącej do klasy
sf::RenderWindow, natomiast jako argument podaje się położenie myszy względem okna, dla którego chcesz otrzymać położenie określonego punktu na scenie. Zagmatwane? Ten temat zostanie szerzej omówiony w jednym z dalszych rozdziałów, wraz z odpowiednim przykładem. W każdym razie kod zwracający aktualną pozycję myszy na scenie może wyglądać tak:
sf::RenderWindow oknoAplikacji;
sf::Vector2i pozycjaMyszyWzgledemOkna = sf::Mouse::getPosition( oknoAplikacji );
sf::Vector2f pozycjaMyszyNaScenie = oknoAplikacji.convertCoords( pozycjaMyszyWzgledemOkna );
Bezpośredni dostęp do joysticka
Interesującym elementem biblioteki
SFML 2.0, obok którego trudno przejść obojętnie, jest możliwość łatwej obsługi joysticków. Tak samo jak w przypadku omówionych już urządzeń wejściowych, obsługa joysticka sprowadza się do wywoływania odpowiednich metod statycznych, które znajdują się w klasie
sf::Joystick. Metody statyczne we wspomnianej klasie mają następujące deklaracje:
namespace sf
{
class Joystick
{
public:
static bool isConnected( unsigned int joystick );
static unsigned int getButtonCount( unsigned int joystick );
static bool hasAxis( unsigned int joystick, Axis axis );
static bool isButtonPressed( unsigned int joystick, unsigned int button );
static float getAxisPosition( unsigned int joystick, Axis axis );
};
}
Aktualnie podłączone joysticki
Metoda
isConnected służy do sprawdzenia czy joystick o podanym identyfikatorze jest podłączony do komputera. Biblioteka
SFML 2.0 obsługuje do 8 joysticków, a więc joysticki mają identyfikatory od 0 do 7 włącznie. Przykład:
if( sf::Joystick::isConnected( 0 ) )
{
}
Liczba przycisków joysticka
Metoda
getButtonCount zwraca liczbę przycisków, jakie obsługuje joystick o podanym identyfikatorze. Przykład:
unsigned iLiczbaPrzyciskow = sf::Joystick::getButtonCount( 0 );
Aktualny stan przycisków joysticka
Za pomocą metody
isButtonPressed możliwe jest sprawdzenie, czy określony przycisk danego joysticka jest aktualnie wciśnięty. Przyciski dla każdego joysticka są numerowane wartościami od 0 do 31 włącznie. Przykład:
if( sf::Joystick::isButtonPressed( 0, 1 ) )
{
}
Dostępne osie joysticka
Metoda
hasAxis służy do sprawdzania czy joystick o podanym identyfikatorze posiada daną oś. Nazwy osi są zdefiniowane w klasie
sf::Joystick i są następujące:
namespace sf
{
class Joystick
{
public:
enum Axis
{
X, Y, Z, R, U, V, PovX, PovY
};
};
}
Poniższy przykład pokazuje jak należy korzystać z metody statycznej
hasAxis:
if( sf::Joystick::hasAxis( 0, sf::Joystick::X ) )
{
}
Aktualny stan osi joysticka
Za pomocą metody
getAxisPosition możliwe jest pobranie aktualnego położenia określonej osi dla danego joysticka. Zwracana wartość jest typu
float. Przykład:
float x = sf::Joystick::getAxisPosition( 0, sf::Joystick::X );
float y = sf::Joystick::getAxisPosition( 0, sf::Joystick::Y );
obiekt.przesun( x, y );
Podsumowanie
Obsługa bezpośredniego dostępu do urządzeń wejściowych, takich jak klawiatura, mysz oraz joystick jest bardzo prosta w bibliotece
SFML 2.0. Pamiętaj, że bezpośredni dostęp do urządzeń jest idealnym rozwiązaniem do realizacji sterowania w grach dynamicznych, w których kluczową rolę odgrywa szybkość reakcji aplikacji na podejmowane działania przez użytkownika.