Qt и SDL. Подключение и использование джойстика.

Использование джойстика

Сегодня, как уже понятно из названия статьи, мы поговорим об использовании джойстиков, об их подключении и обработке приходящих с джойстика сигналов. Для чего это вообще надо? Ну вот, например, хочется нам собрать робота. А как им управлять? Вот как раз для этого можно прикрутить к компьютеру джойстик, написать небольшую программку, а затем передавать сигналы управления микроконтроллеру, установленному в нашем роботе. И это только одно применение, сразу пришедшее в голову 🙂 Короче, штука полезная.

Итак, для работы с джойстиком мы будем использовать библиотеку SDL (Simple DirectMedia Layer). Помимо доступа к джойстику эта библиотека может помочь реализовать работу с графическими подсистемами и звуковыми устройствами. Но мы пока остановимся на подключении джойстика…

В качестве среды разработки мы, как и обычно, будем использовать Qt Creator. И теперь, для начала, нам нужно скачать библиотеку SDL. Заходим вот сюда и в самом низу находим раздел Development Libraries. Нас интересует Win32 и Mingw32. Качаем!

Распаковываем куда-нибудь скачанный архив и можно переходить к написанию программы. НО! Для начала нужно зайти в архиве с библиотекой SDL в папку bin и скопировать оттуда файл SDL.dll. А запихать этот файл нужно в папку куда установлен Qt Creator, вот по такому пути:

QtSDK/Desktop/Qt/4.8.1/mingw/bin

Готово!

Теперь создаем новый пустой проект. Мы уже почти готовы переходить к написанию программы, но еще надо немного подредактировать .pro файл созданного проекта, а именно, добавить строки:

INCLUDEPATH += C:/SDL-1.2.15/SDL-1.2.15/include/SDL
LIBS += -lSDL

Все приготовления завершены, давайте создадим небольшой пример, чтобы убедиться, что все работает как надо. Подключим джойстик, у меня вот примерно такой:

Подключение джойстика

Сделаем так, чтобы приложение считывало данные о текущем положении ручки джойстика, ну и наглядно выводило эти данные.

// Подключаем SDL
include <SDL.h>

// main определена и в SDL и в QT, поэтому #undef
#undef main
#include 

QT_USE_NAMESPACE

int main(int argc, char *argv[])
{
	// Переменная для нашего джойстика
	SDL_Joystick *joy;
	SDL_Event event;

	// Инициализация SDL для использования джойстика
	SDL_Init(SDL_INIT_JOYSTICK);
	
	// Включаем
	SDL_JoystickEventState(SDL_ENABLE);
	
	// Открываем ;)
	joy = SDL_JoystickOpen(0);

	while(1)
	{
		// Примитивнейшая задержка
		unsigned int j = 0;
		for (j = 0; j < 60000; j++);

		SDL_PollEvent(&event);

		// Получаем значения, соответствующие смещению джойстика: 
		// по оси Х
		int xAxis = SDL_JoystickGetAxis(joy, 0);
		// по оси Y
		int yAxis = SDL_JoystickGetAxis(joy, 1);

		// Выводим
		qDebug() << xAxis << yAxis;
	}
}

В зависимости от положения ручки джойстика возвращаемые значения могут изменяться от -32768 до 32767 для каждой оси. Это и видим с помощью нашего приложения. При перемещении ручки видим как меняются значения, возвращаемые приложением!

Библиотека SDL

Вот так вот получилось кратко, но я надеюсь, информативно 🙂 Немного разобрались с джойстиками, наверное, в будущем еще не раз к этому вернемся, а на сегодня это все, до новых встреч!

Поделиться!

Подписаться
Уведомление о
guest
7 Комментарий
старее
новее большинство голосов
Inline Feedbacks
View all comments
zigger
zigger
6 лет назад

Хмм.. на qt 5.1.0 корректно не подключается.
main.cpp:13: error: undefined reference to `SDL_Init’

zigger
zigger
Reply to  Aveal
6 лет назад

Буду очень ждать. Мой мозг кипит, гугл изрыт вдоль и поперек, а решения я так и не нашел)))

zigger
zigger
Reply to  Aveal
6 лет назад

На http://www.gamedev.ru/ подсказали, что я не так делал: в .pro файле после INCLUDEPATH нужно еще саму библиотеку подключить:
LIBS += -lSDL
с ней все уже ок, чоответственно.

zigger
zigger
Reply to  zigger
6 лет назад

*соответственно)))

Haamu
Haamu
6 лет назад

Добавил библиотеку, как описано в статье. Не помпилируется. Выдает ошибку “:-1: ошибка: cannot find -lSDL”

Присоединяйтесь!

Profile Profile Profile Profile Profile
Vkontakte
Twitter

Язык сайта

Июль 2020
Пн Вт Ср Чт Пт Сб Вс
« Июн    
 12345
6789101112
13141516171819
20212223242526
2728293031  

© 2013-2020 MicroTechnics.ru