#c #c #sdl #sdl-2 #joystick
#c #c #sdl #sdl-2 #джойстик
Вопрос:
Итак, я пытаюсь научиться использовать джойстики с SDL2, и я следую руководству LazyFoo (геймпады и джойстики), но, должно быть, я делал что-то не так, потому что моя программа не обнаруживает мой контроллер!
Windows обнаруживает это (я использую Windos 7 и беспроводной контроллер Xbox 360), а пример LazyFoo (который я скачал по ссылке выше) также обнаруживает мой контроллер!
Я искал и пробовал некоторые вещи, но ничего из того, что я пробовал, похоже, не работает…
Вот мой инициализированный:
if (SDL_Init(SDL_INIT_EVERYTHING) < 0){
cout << "Error initializing SDL!" << endl;
return 1;
}
И эта часть находится внутри конструктора моего класса ввода, который должен был «запускать» джойстик (а также обнаруживает событие из keyborad):
if (SDL_NumJoysticks() < 1){
cout << "No joystick detected." << endl;
}
else{
controller = SDL_JoystickOpen(0);
if (controller == NULL){
cout << "Error: Unable to open Joystick." << endl;
}
else{
isUsingJoystick = true;
}
}
Я также пытался использовать SDL_JoystickEventState(SDL_ENABLE)
после инициализации и SDL_JoystickUpdate()
, но это тоже не сработало…
Что я забыл?
Если вы, ребята, хотите, я могу отредактировать сообщение с помощью кодов моего класса ввода…
РЕДАКТИРОВАТЬ: я забыл сказать, что, хотя мой контроллер подключен и все такое, SDL_NumJoysticks()
возвращает 0…
Комментарии:
1. Работает ли вторая часть кода?, вы правильно читаете события?
2. @это я так не думаю… Я могу считывать события с клавиатуры, но не с джойстика. Кроме того, как я отредактировал в сообщении,
SDL_NumJoysticks()
возвращает 0, так что, похоже, контроллер не подключен…3. Пожалуйста, не добавляйте «[РЕШАЕМАЯ]» в заголовок. Способ указать, что проблема решена, — это принять ответ. (Вполне допустимо подчеркнуть свой собственный ответ.)
Ответ №1:
Я понял, что я делал неправильно. Оказывается, я пытался открыть свой джойстик перед инициализацией самого SDL (я открывал свой джойстик в конструкторе моего Input
класса, но до этого я создавал один и единственный экземпляр своего Input
класса SDL_INIT_EVERYTHING
.)
Я думаю, что было бы невозможно обнаружить это только с помощью информации, которую я написал, поэтому извините за беспокойство.