SDL_GAMECONTROLLERCONFIG против SDL_GameControllerAddMappingsFromFile - PullRequest
0 голосов
/ 06 января 2019

Я использую 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

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

1 Ответ

0 голосов
/ 06 января 2019

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

SDL_JoystickEventState(SDL_ENABLE);
SDL_GameControllerEventState(SDL_ENABLE);

а также:

...
case SDL_JOYDEVICEADDED:
case SDL_CONTROLLERDEVICEADDED:
...