SDL2 — Не обнаружены джойстики?

#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 .)

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