我正在使用SDL 2作为平台层和OpenGL作为图形和渲染,在写一个C++程序。我已经制作出一个完整的工作原型,包括键盘和鼠标输入。现在,我正在尝试使用SDL的游戏控制器API连接游戏手柄(以替代或补充键盘控制)。不幸的是,尽管它与其他软件完美配合使用,但控制器似乎无法被识别。这是一个Sony Dualshock 4(适用于Playstation 4系统)。我的系统是Mac OS 10.9.5,并且我正在使用SDL 2.0.5和官方社区控制器数据库来进行SDL 2.0.5映射,其中包含ps4控制器映射。
我还使用了官方工具添加了一个新的映射。根据相关函数的调用,这个映射也成功地加载了。
以下是我的代码,尽可能接近最小化的示例:
030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
4c05000000000000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X
我还使用了官方工具添加了一个新的映射。根据相关函数的调用,这个映射也成功地加载了。
以下是我的代码,尽可能接近最小化的示例:
// in main
// window and graphics context initialization here
// initialize SDL
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER | SDL_INIT_HAPTIC) < 0) {
fprintf(stderr, "%s\n", "SDL could not initialize");
return EXIT_FAILURE;
}
// load controller mappings, I tested this and 35 mappings load successfully, which is expected
SDL_GameControllerAddMappingsFromFile("./mapping/gamecontrollerdb_205.txt");
// the controller handle
SDL_GameController* controller = nullptr;
// max_joysticks is 1, which means that the device connects at least
int max_joysticks = SDL_NumJoysticks();
if (max_joysticks < 1) {
return EXIT_FAILURE;
}
// this returns, which means that the joystick exists, but it isn't recognized as a game controller.
if (!SDL_IsGameController(0)) {
return EXIT_FAILURE;
}
// I never get passed this.
controller = SDL_GameControllerOpen(0);
fprintf(stdout, "CONTROLLER: %s\n", SDL_GameControllerName(controller));
有人遇到这个问题吗?我进行了一些初步的搜索,但似乎通常要么没有手柄,要么一切都被识别。
此外,连接控制器时SDL_CONTROLLERDEVICEADDED
不会触发。
在启动程序之前,通过 USB 连接控制器。此外,这是新控制器之一,我不确定是否与新控制器配套映射。考虑到有两个不同的条目,我认为是这样的。 谢谢。
编辑:
我再次检查,PS4 控制器作为游戏手柄工作正常,但未被识别为控制器,这意味着映射不正确或不存在。这可能是因为我的控制器是双震动 4 的“版本 2”,我不确定是否添加了与 2.0.5 兼容的映射。嗯。