SDL_GAMECONTROLLERCONFIG против SDL_GameControllerAddMappingsFromFile

Я использую SDL_GameControllerAddMappingsFromFile в своей игре, и я добавил новый игровой контроллер в файл gamecontrollerdb.txt. Я использовал SDL2 Gamepad Tool для создания отображения и добавил его в файл gamecontrollerdb.txt. Если я установлю переменную окружения SDL_GAMECONTROLLERCONFIG, чтобы указать на сопоставление, то все будет работать. Однако сопоставление не работает, когда я удаляю переменную среды, даже если такое же сопоставление добавлено в файл.

Я использовал соответствующий инструмент check.py, как указано здесь: https://github.com/gabomdq/SDL_GameControllerDB

Инструменты говорят, что файл выглядит хорошо. Я использую последнюю официальную версию SDL2 (2.0.9) и работаю под Windows 10. Мой код кросс-платформенный, и я протестировал его под Raspian с тем же разочаровывающим результатом.

Windows распознает контроллер Bluetooth с правильным именем, и я не получаю сообщение об ошибке при загрузке файла (мне кажется, что при чтении файла проверка ошибок вообще не производится).

Я протестировал код с несколькими другими игровыми контроллерами, и они работают, как и ожидалось, в Windows / OSX и Linux.

if (SDL_GameControllerAddMappingsFromFile("gamecontrollerdb.txt") == -1) {
std::cout << "Warning: Failed to load game controller mappings: " << SDL_GetError() << std::endl;
}

Код, который фактически использует контроллер, находится здесь:
https://github.com/drpatrik/combatris/blob/develop/combatris/src/combatris.cpp

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

0

Решение

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

SDL_JoystickEventState(SDL_ENABLE);
SDL_GameControllerEventState(SDL_ENABLE);

так же как:

...
case SDL_JOYDEVICEADDED:
case SDL_CONTROLLERDEVICEADDED:
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]