Введение
Этот урок объясняет как получить доступ к глобальным ресурсам (global inputs): клавиатуре, мыши и джойстику. Не следует путать их с событиями: ресурсы в режиме реального времени позволяют запросить глобальные состояния клавиатуры, мыши и джойстика в любое время («Эта кнопка нажата в данный момент?», «Где мышь?»). В то время как события уведомляют вас когда что-то происходит («Эта кнопка была нажата», «Мышь переместилась»).
Клавиатура
Класс, предоставляющий доступ к состоянию клавиатуры, — sf::Keyboard. Он содержит только один метод isKeyPressed(), который проверяет текущее состояние клавиши (нажата или отпущена). Это статический метод, и поэтому вам не нужно создавать экземпляр класса sf::Keyboard что бы воспользоваться им.
Эта функция напрямую считывает состояние клавиатуры игнорируя факт, что ваше окно активно или неактивно.
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { // нажата клавиша влево: сдвинем нашего героя character.move(1, 0); }
Коды клавиш определены в перечислении sf::Keyboard::Key.
Коды некоторых клавиш могут отсутствовать или быть неправильно интерпретированы в зависимости от ОС и раскладки клавиатуры. Это будет улучшено в следующих версиях
SFML.
Мышь
Класс, предоставляющий доступ к состоянию мыши — sf::Mouse. Так же как и sf::Keyboard, класс sf::Mouse имеет только один статический метод и не подразумевает наличие созданного экземпляра класса.
Вы можете проверить были ли нажаты кнопки:
if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) { // нажата левая кнопка: стреляем gun.fire(); }
Коды клавиш мыши определены в перечислении sf::Mouse::Button. SFML поддерживает 5 кнопок мыши: левая, правая, средняя (колёсико), дополнительная #1 и дополнительная #2 (боковые кнопки).
Вы также можете получить и установить положение мыши, либо относительно окна, либо относительно экрана монитора.
// получить глобальную позицию мыши (относительно экрана) sf::Vector2i globalPosition = sf::Mouse::getPosition(); // получить локальную позицию мыши (относительно окна) sf::Vector2i localPosition = sf::Mouse::getPosition(window); // window это объект класса sf::Window
// установить глобальную позицию мыши (относительно экрана) sf::Mouse::setPosition(sf::Vector2i(10, 50)); // установить локальную позицию мыши (относительно окна) sf::Mouse::setPosition(sf::Vector2i(10, 50), window); // window это объект класса sf::Window
Там нет функции для чтения текущего состояния колеса мыши, связанно это с тем, что колесо не имеет абсолютного положения, и его перемещение может быть только относительным.
Джойстик
Класс, предоставляющий доступ к состоянию джойстика, — sf::Joystick. Как и другие классы из этого урока, у него есть только один статический метод.
Джойстики определяются с помощью своих индексов (от 0 до 7, т.к. SFML поддерживает 8 типов джойстиков). Поэтому, первый аргумент всех функций класса sf::Joystick — это индекс опрашиваемого джойстика.
Вы можете проверить, подключен джойстик или нет:
if (sf::Joystick::isConnected(0)) { // подключен джойстик номер 0 ... }
Вы также можете узнать о возможностях подключенного джойстика:
// проверяем сколько кнопок имеет джойстик номер 0 unsigned int buttonCount = sf::Joystick::getButtonCount(0); // проверяем имеет ли джойстик номер 0 ось Z bool hasZ = sf::Joystick::hasAxis(0, sf::Joystick::Z);
Оси джойстика определены в перечислении sf::Joystick::Axis. Так как названия для кнопок не имеют особого смысла, они просто пронумерованы от 0 до 31.
Вы можете запрашивать состояние кнопок и осей джойстика:
// нажата кнопка 1 джойстика номер 0? if (sf::Joystick::isButtonPressed(0, 1)) { // да: стреляем! gun.fire(); } // какие текущие положения осей X и Y джойстика номер 0? float x = sf::Joystick::getAxisPosition(0, sf::Joystick::X); float y = sf::Joystick::getAxisPosition(0, sf::Joystick::Y); character.move(x, y);
Состояния джойстика обновляются автоматически с помощью цикла обработки событий. Если у вас его нет, или если нужно считать состояние джойстика перед началом цикла событий (например проверить какой из джойстиков подключен), вы должны вызвать функцию sf::Joystick::update() для того, что бы быть уверенным в актуальном состоянии джойстика.
Помоги пожалуйста, подробнее объясни про нажатия мыши, если честно я ни чего не понял из того что ты там написал.
Вот абсолютно рабочий пример:
Задавай более конкретные вопросы, а то мне непонятно, что именно тебе не понятно :)
Где найти список всех клавиш?
Вот тут http://www.sfml-dev.org/documentation/2.1/classsf_1_1Keyboard.php#acb4cacd7cc5802dec45724cf3314a142
Как узнать на каком месте я кликнул мышь? Мне нужно при нажатии на определенный тайл его повернуть. Как узнать на какой именно я нажал?
Вы как-то невнимательно читали видимо)) там же есть метод для получения позиции мыши..
Сравнивайте координаты тайла и координаты мышки по событию клика, если координаты мыши попадают в нужную область — поворачивайте. :)