Использование SDL_INIT_JOYSTICK без SDL_INIT_VIDEO

Я потерял некоторое время, пытаясь получить поддержку джойстика для моего приложения с помощью SDL, в основном потому, что шаги инициализации, где это:

SDL_Init(SDL_INIT_JOYSTICK|SDL_INIT_VIDEO);
SDL_JoystickEventState(SDL_ENABLE);

Не получилось, если я просто инициализировал джойстик, это нужно было сделать вместе с видео. Я хочу, чтобы это было очень минималистично, поэтому было бы неплохо узнать, есть ли способ инициализировать только джойстик. Если нет, может ли кто-нибудь сказать мне, есть ли какой-либо недостаток в инициализации видео и его никогда не использовать?

Я здесь на Ubuntu, но я ожидаю, что это будет работать на разных платформах. Отличается ли это поведение в разных средах?

Спасибо :)


person lfzawacki    schedule 03.02.2011    source источник


Ответы (2)


У меня были похожие проблемы при разработке небольшого приложения CLI, которое принимало ввод с помощью джойстика. По сути, это не работало без SDL_INIT_VIDEO, потому что система событий SDL связана с видеодрайвером, по крайней мере, в Linux (X11).

Совершенно нормально запускать видео без создания окна (по крайней мере, это работает). Я тестировал этот подход как на Win32, так и на Linux, поэтому, похоже, он отлично работает и на нескольких платформах.

person Maister    schedule 03.02.2011
comment
Я пытаюсь это сделать на Windows7, и кажется, что это не так. Отключение SDL_CreateWindow приводит к тому, что цикл событий запускается кнопками, а не аналоговыми джойстиками на Logitech Gamepad. С созданным окном все работает нормально. - person user505160; 09.12.2015

У меня похожая проблема, я решил ее, не используя цикл событий. Вместо этого я вручную обновляю джойстики, а затем использую функции SDL для проверки джойстиков.

SDL_Init(SDL_INIT_JOYSTICK);
SDL_JoystickEventState(SDL_DISABLE);
joystick = SDL_JoystickOpen(0);
SDL_Joystick* joystick;
while(true)
{
    SDL_JoystickUpdate();
    SDL_JoystickGetAxis(joystick, 0);
}
person Kevin French    schedule 05.02.2014