SDL_GAMECONTROLLERCONFIG vs. SDL_GameControllerAddMappingsFr
SDL_GAMECONTROLLERCONFIG vs. SDL_GameControllerAddMappingsFromFile
我在游戏中使用SDL_GameControllerAddMappingsFromFile,并在gamecontrollerdb.txt文件中添加了一个新的游戏控制器。我使用SDL2 Gamepad工具创建映射,并将其添加到gamecontrollerdb.txt文件中。如果我将环境变量SDL_GAMECONTROLLERCONFIG设置为指向映射,那么一切都正常。但是,当我删除环境变量时,即使将相同的映射添加到文件中,映射也不起作用。
我使用了此处指定的相应工具check.py:https://github.com/gabomdq/SDL_GameControllerDB
工具显示文件看起来不错。我使用的是SDL2(2.0.9)的最新官方版本,运行在Windows10下。我的代码是跨平台的,我在Raspian下进行了测试,结果同样令人沮丧。
Windows可以识别具有正确名称的蓝牙控制器,并且在加载文件时没有收到错误消息(在我看来,读取文件时根本没有错误检查)。
我已经用其他几个游戏控制器测试了代码,它们在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
我希望控制器能够被识别,因为映射显然是有效的,并且被添加到文件中。
我发现了问题所在。一些游戏手柄被视为操纵杆,这意味着你需要同时打开游戏手柄和操纵杆事件,并收听两者的附加事件:
SDL_JoystickEventState(SDL_ENABLE);
SDL_GameControllerEventState(SDL_ENABLE);
以及:
...
case SDL_JOYDEVICEADDED:
case SDL_CONTROLLERDEVICEADDED:
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- SDL 窗口不会弹出
- SDL 操纵杆按钮按下/C++
- VSCode IntelliSense无法识别SDL框架的SDL_image扩展库
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- SDL 映像:无法打开映像,仅显示错误消息
- 如何在 3D OpenGL 场景上绘制 SDL 2D 矩形?
- "Undefined symbols for architecture x86_64" 在 SDL 2 (macOS) 中
- 为什么 SDL 在 Mac 上比 Linux 慢得多?
- 在 OSX 上打开 SDL 窗口时不要打开终端窗口
- SDL + OpenGL ES 2.0 使用着色器显示纹理
- SDL GPU 为什么将两个图像分成两个单独的循环更快?
- 在 cmake 中找不到 SDL 库
- SDL/C++: 如何平滑但随机地移动矩形?
- 如何与 SDL 库链接?
- 为什么我的C++代码不呈现 SDL 矩形?
- 为什么要在初始化SDL之前在SDL中声明指针
- C++/SDL 如何覆盖数组?
- 在 SDL 中水平减小静态图像进度条