SDL 2无法打开控制器但操纵杆已识别

问题描述 投票:2回答:1

我正在编写一个C ++程序,使用SDL 2作为平台层,使用opengl进行图形和渲染。我有一个完整的原型键盘和鼠标输入。现在我正在尝试使用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));

有谁遇到过这个问题?正如我所提到的,我已经做了一些初步搜索,但似乎通常操纵杆的数量为0,或者所有东西都被识别。

此外,当我连接控制器时,SDL_CONTROLLERDEVICEADDED没有触发。

在启动程序之前,控制器通过USB连接。此外,这是一个新的控制器,我不确定映射是否适用于新的控制器。我假设有两个不同的条目。谢谢。

编辑:

我仔细检查了PS4控制器作为操纵杆工作正常,但它不被识别为控制器,这意味着映射不正确或不存在。这可能是因为我的控制器是双击4的“版本2”,我不确定是否添加了2.0.5兼容的映射。嗯

c++ macos input sdl sdl-2
1个回答
0
投票

控制器被识别为操纵杆但不是控制器,这意味着我找不到任何可用的映射(2.0.5控制器映射格式)与控制器相对应。从SDL 2.0.5更新到2.0.8也更新了可用的映射,现在控制器被识别为游戏控制器。

注意:通常在项目中期升级工具是一个糟糕的主意,但在这种情况下,它是安全的。

© www.soinside.com 2019 - 2024. All rights reserved.